# HG changeset patch # User William Roberts # Date 1268572176 0 # Node ID 2411cd0e2ad61bed8def71ce01aa42caae61e507 # Parent abbe9afab2afe5c57a89dddb2e5aa5975f4783d9# Parent 485080d5cb638391e5b631b8a663303637bf3c34 Automatic merge from PDK_3.0.h diff -r abbe9afab2af -r 2411cd0e2ad6 phone_plat/phone_application_commands_api/inc/phoneappcommands.hrh --- a/phone_plat/phone_application_commands_api/inc/phoneappcommands.hrh Mon Mar 08 21:43:24 2010 +0000 +++ b/phone_plat/phone_application_commands_api/inc/phoneappcommands.hrh Sun Mar 14 13:09:36 2010 +0000 @@ -219,7 +219,16 @@ EPhoneIsCustomizedDialerVisible, EPhoneCmdVideoCallOutOfMemory, - + + // dialer and easy dialing releated commands + EEasyDialingSettingsItemPlaceHolder, + EEasyDialingCmdSelect, + EPhoneDialerValidNumber, + EPhoneDialerInvalidNumber, + EPhoneCmdUpdateCba, + EPhoneCmdBlockingDialogLaunched, + EPhoneCmdBlockingDialogClosed, + EPhoneCmdLast }; diff -r abbe9afab2af -r 2411cd0e2ad6 phone_plat/telephony_information_api/inc/telinformationpstypes.h --- a/phone_plat/telephony_information_api/inc/telinformationpstypes.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phone_plat/telephony_information_api/inc/telinformationpstypes.h Sun Mar 14 13:09:36 2010 +0000 @@ -21,7 +21,7 @@ // INCLUDES #include -#include +#include // CONSTANTS diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneui/group/commonphoneapp_icons_scalable.mk --- a/phoneapp/phoneui/group/commonphoneapp_icons_scalable.mk Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneui/group/commonphoneapp_icons_scalable.mk Sun Mar 14 13:09:36 2010 +0000 @@ -83,7 +83,9 @@ /c8,8 qgn_indi_dialer_add_contacts.svg \ /c8,8 qgn_indi_dialer_logs.svg \ /c8,8 qgn_indi_button_send_dtmf.svg \ - /c8,8 qgn_indi_button_silence.svg + /c8,8 qgn_indi_button_silence.svg \ + /c8,8 qgn_indi_button_answer_white.svg \ + /c8,8 qgn_indi_button_logdialer_white.svg \ FREEZE : do_nothing diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneui/group/iconlist.txt --- a/phoneapp/phoneui/group/iconlist.txt Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneui/group/iconlist.txt Sun Mar 14 13:09:36 2010 +0000 @@ -29,4 +29,6 @@ -c8,8 qgn_indi_tb_microphone_unmute -c8,8 qgn_indi_tb_ihf_on -c8,8 qgn_indi_tb_handset --c8,8 qgn_indi_tb_bthf \ No newline at end of file +-c8,8 qgn_indi_tb_bthf +-c8,8 qgn_indi_button_answer_white +-c8,8 qgn_indi_button_logdialer_white \ No newline at end of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneui/help/data/xhtml.zip Binary file phoneapp/phoneui/help/data/xhtml.zip has changed diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneui/help/inc/incl.hlp.hrh --- a/phoneapp/phoneui/help/inc/incl.hlp.hrh Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneui/help/inc/incl.hlp.hrh Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* 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" diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneui/loc/phone.loc --- a/phoneapp/phoneui/loc/phone.loc Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneui/loc/phone.loc Sun Mar 14 13:09:36 2010 +0000 @@ -451,4 +451,10 @@ // #define qtn_called_number_has_barred_incoming_calls "Called number has barred incoming calls" +//d: Permanent note Invalid Card. Shown when the Sim inserted is not same as +//d: the one provided by the operator. +//l: popup_note_window +//w: +//r: 5.0 +#define text_invalid_card "Invalid card" // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneui/src/cphoneappui.cpp --- a/phoneapp/phoneui/src/cphoneappui.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneui/src/cphoneappui.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -109,6 +109,10 @@ BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible ); SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | CAknAppUiBase::EDisableSendKeyLong ); + // Item specific soft key IS DISABLED in order to make SK1 visible with easy dialing. + CEikCba* cba = static_cast( CEikButtonGroupContainer::Current()->ButtonGroup() ); + cba->EnableItemSpecificSoftkey( EFalse ); + SetAliasKeyCodeResolverL( this ); // Set phone application to be system application so it can't be closed diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneui/srcdata/phoneui.rss --- a/phoneapp/phoneui/srcdata/phoneui.rss Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneui/srcdata/phoneui.rss Sun Mar 14 13:09:36 2010 +0000 @@ -6235,20 +6235,19 @@ buf = qtn_bt_dev_address; } - -// --------------------------------------------------------- -// -// r_phone_information_note_with_wait +// --------------------------------------------------------- +// +// r_phone_information_note_with_cba // It defines note template for information notes. Text // must be replaced to correct in code. Note has wait // flag. // // --------------------------------------------------------- // -RESOURCE DIALOG r_phone_information_note_with_wait +RESOURCE DIALOG r_phone_information_note_with_cba { flags = EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar | - EEikDialogFlagCbaButtons | EEikDialogFlagWait; + EEikDialogFlagCbaButtons; buttons = r_phoneui_wait_note_cba; items = { @@ -6999,7 +6998,16 @@ buf = text_sim_lock_active; } - +// ----------------------------------------------------------------------------- +// +// r_sim_invalid_uicc +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_sim_invalid_uicc + { + buf = text_invalid_card; + } // ----------------------------------------------------------------------------- // @@ -7729,6 +7737,11 @@ }, MENU_ITEM { + command = EEasyDialingSettingsItemPlaceHolder; + flags = EEikMenuItemDimmed; + }, + MENU_ITEM + { command = EAknCmdEditItemPlaceHolder; }, MENU_ITEM diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuicontrol/bwins/phoneuicontrolu.def --- a/phoneapp/phoneuicontrol/bwins/phoneuicontrolu.def Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuicontrol/bwins/phoneuicontrolu.def Sun Mar 14 13:09:36 2010 +0000 @@ -6,230 +6,231 @@ ?HandleKeyMessageL@CPhoneStateCallSetup@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 5 NONAME ; void CPhoneStateCallSetup::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode) ?SetContextMenuL@CPhoneState@@MAEXH@Z @ 6 NONAME ; void CPhoneState::SetContextMenuL(int) ?CallFetchedNumberL@CPhoneStateInCall@@MAEXABVTDesC16@@@Z @ 7 NONAME ; void CPhoneStateInCall::CallFetchedNumberL(class TDesC16 const &) - ?SetCbaL@CPhoneCbaManager@@QAEXH@Z @ 8 NONAME ; void CPhoneCbaManager::SetCbaL(int) - ?InstanceL@CPhoneReconnectQuery@@SAPAV1@XZ @ 9 NONAME ; class CPhoneReconnectQuery * CPhoneReconnectQuery::InstanceL(void) - ?HandlePhoneStartupL@CPhoneState@@UAEXXZ @ 10 NONAME ; void CPhoneState::HandlePhoneStartupL(void) - ?HandlePhoneFocusLostEventL@CPhoneStateIdle@@UAEXXZ @ 11 NONAME ; void CPhoneStateIdle::HandlePhoneFocusLostEventL(void) - ?HandleIdleL@CPhoneStateInCall@@IAEXH@Z @ 12 NONAME ; void CPhoneStateInCall::HandleIdleL(int) - ?ShowQueryL@CPhoneState@@IAEXH@Z @ 13 NONAME ; void CPhoneState::ShowQueryL(int) - ?PhoneNumberAvailableInPhoneEngineL@CPhoneStateInCall@@IAEXH@Z @ 14 NONAME ; void CPhoneStateInCall::PhoneNumberAvailableInPhoneEngineL(int) - ?DisplayCallTerminationNoteL@CPhoneState@@IAEXXZ @ 15 NONAME ; void CPhoneState::DisplayCallTerminationNoteL(void) - ??0CPhoneStateInCall@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 16 NONAME ; CPhoneStateInCall::CPhoneStateInCall(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) - ?HandleNumberLongKeyPressL@CPhoneStateIdle@@IAEXXZ @ 17 NONAME ; void CPhoneStateIdle::HandleNumberLongKeyPressL(void) - ?PhoneEngine@CPhoneStateMachine@@UAEPAVMPEPhoneModel@@XZ @ 18 NONAME ; class MPEPhoneModel * CPhoneStateMachine::PhoneEngine(void) - ?OpenMenuBarL@CPhoneStateCallSetup@@MAEXXZ @ 19 NONAME ; void CPhoneStateCallSetup::OpenMenuBarL(void) - ??1CPhoneStateCallSetup@@UAE@XZ @ 20 NONAME ; CPhoneStateCallSetup::~CPhoneStateCallSetup(void) - ?HandleEnvironmentChangeL@CPhoneUIController@@UAEXH@Z @ 21 NONAME ; void CPhoneUIController::HandleEnvironmentChangeL(int) - ?Instance@CPhoneStateHandle@@SAPAV1@XZ @ 22 NONAME ; class CPhoneStateHandle * CPhoneStateHandle::Instance(void) - ?HandleNumberEntryClearedL@CPhoneStateIdle@@MAEXXZ @ 23 NONAME ; void CPhoneStateIdle::HandleNumberEntryClearedL(void) - ?DynInitMenuPaneL@CPhoneStateIncoming@@MAEXHPAVCEikMenuPane@@@Z @ 24 NONAME ; void CPhoneStateIncoming::DynInitMenuPaneL(int, class CEikMenuPane *) - ?HandleCommandL@CPhoneState@@UAEHH@Z @ 25 NONAME ; int CPhoneState::HandleCommandL(int) - ?StartAlsLineChangeTimerL@CPhoneState@@IAEXXZ @ 26 NONAME ; void CPhoneState::StartAlsLineChangeTimerL(void) - ?IsNumberEntryVisibleL@CPhoneState@@QAEHXZ @ 27 NONAME ; int CPhoneState::IsNumberEntryVisibleL(void) - ?RetainPreviousKeylockStateL@CPhoneState@@QAEXXZ @ 28 NONAME ; void CPhoneState::RetainPreviousKeylockStateL(void) - ?HandlePhoneEngineMessageL@CPhoneStateIdle@@UAEXHH@Z @ 29 NONAME ; void CPhoneStateIdle::HandlePhoneEngineMessageL(int, int) - ?HandleDialingL@CPhoneStateIdle@@MAEXH@Z @ 30 NONAME ; void CPhoneStateIdle::HandleDialingL(int) - ?CustomizedDialerCbaResourceIdL@CPhoneState@@IAEHXZ @ 31 NONAME ; int CPhoneState::CustomizedDialerCbaResourceIdL(void) - ?CaptureKeysDuringCallNotificationL@CPhoneState@@IAEXH@Z @ 32 NONAME ; void CPhoneState::CaptureKeysDuringCallNotificationL(int) - ?HandleKeyPressDurationL@CPhoneState@@UAEXW4TKeyCode@@VTTimeIntervalMicroSeconds@@@Z @ 33 NONAME ; void CPhoneState::HandleKeyPressDurationL(enum TKeyCode, class TTimeIntervalMicroSeconds) - ?ChangeState@CPhoneStateMachine@@UAEXH@Z @ 34 NONAME ; void CPhoneStateMachine::ChangeState(int) - ?IsSimStateNotPresentWithSecurityModeEnabled@CPhoneState@@IAEHXZ @ 35 NONAME ; int CPhoneState::IsSimStateNotPresentWithSecurityModeEnabled(void) - ?HandlePhoneEngineMessageL@CPhoneState@@UAEXHH@Z @ 36 NONAME ; void CPhoneState::HandlePhoneEngineMessageL(int, int) - ?HandleNumberEntryClearedL@CPhoneStateIncoming@@UAEXXZ @ 37 NONAME ; void CPhoneStateIncoming::HandleNumberEntryClearedL(void) - ?HandleKeyEventL@CPhoneUIController@@UAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 38 NONAME ; enum TKeyResponse CPhoneUIController::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) - ?HandleRemConCommandL@CPhoneStateIdle@@MAEHW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 39 NONAME ; int CPhoneStateIdle::HandleRemConCommandL(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction) - ?HandleAudioPlayStoppedL@CPhoneStateIncoming@@MAEXXZ @ 40 NONAME ; void CPhoneStateIncoming::HandleAudioPlayStoppedL(void) - ?HandleCenRepChangeL@CPhoneState@@UAEXABVTUid@@I@Z @ 41 NONAME ; void CPhoneState::HandleCenRepChangeL(class TUid const &, unsigned int) - ?HandleLongHashL@CPhoneState@@UAEXXZ @ 42 NONAME ; void CPhoneState::HandleLongHashL(void) - ?DialL@CPhoneStateIdle@@MAEXABVTDesC16@@W4TPhoneNumberType@@W4TDialInitiationMethod@1@@Z @ 43 NONAME ; void CPhoneStateIdle::DialL(class TDesC16 const &, enum TPhoneNumberType, enum CPhoneStateIdle::TDialInitiationMethod) - ?ShowNumberBusyNoteL@CPhoneState@@IAEXXZ @ 44 NONAME ; void CPhoneState::ShowNumberBusyNoteL(void) - ?DisconnectCallL@CPhoneState@@IAEHXZ @ 45 NONAME ; int CPhoneState::DisconnectCallL(void) - ?HandleNumberEntryClearedL@CPhoneStateCallSetup@@MAEXXZ @ 46 NONAME ; void CPhoneStateCallSetup::HandleNumberEntryClearedL(void) - ?HandleIdleForegroundEventL@CPhoneStateIdle@@UAEXXZ @ 47 NONAME ; void CPhoneStateIdle::HandleIdleForegroundEventL(void) - ?HandleDisconnectingL@CPhoneState@@IAEXH@Z @ 48 NONAME ; void CPhoneState::HandleDisconnectingL(int) - ?HandleAudioMuteChangedL@CPhoneState@@IAEXXZ @ 49 NONAME ; void CPhoneState::HandleAudioMuteChangedL(void) - ?HandleKeyLockEnabled@CPhoneState@@UAEXH@Z @ 50 NONAME ; void CPhoneState::HandleKeyLockEnabled(int) - ?HandleCommandL@CPhoneStateIncoming@@UAEHH@Z @ 51 NONAME ; int CPhoneStateIncoming::HandleCommandL(int) - ?UpdateSingleActiveCallL@CPhoneState@@IAEXH@Z @ 52 NONAME ; void CPhoneState::UpdateSingleActiveCallL(int) - ?IsOnScreenDialerSupported@CPhoneState@@IBEHXZ @ 53 NONAME ; int CPhoneState::IsOnScreenDialerSupported(void) const - ?SimState@CPhoneState@@IBE?AW4TPESimState@@XZ @ 54 NONAME ; enum TPESimState CPhoneState::SimState(void) const - ?HandleKeyEventL@CPhoneStateCallSetup@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 55 NONAME ; void CPhoneStateCallSetup::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) - ?SetupIdleScreenInBackgroundL@CPhoneState@@IAEXXZ @ 56 NONAME ; void CPhoneState::SetupIdleScreenInBackgroundL(void) - ?SendGlobalWarningNoteL@CPhoneState@@IAEXH@Z @ 57 NONAME ; void CPhoneState::SendGlobalWarningNoteL(int) - ?CompleteSatRequestL@CPhoneState@@IAEXH@Z @ 58 NONAME ; void CPhoneState::CompleteSatRequestL(int) - ?NewL@CPhoneStateStartup@@SAPAV1@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 59 NONAME ; class CPhoneStateStartup * CPhoneStateStartup::NewL(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) - ?LaunchNewCallQueryL@CPhoneStateInCall@@IAEXXZ @ 60 NONAME ; void CPhoneStateInCall::LaunchNewCallQueryL(void) - ?NeedToSendToBackgroundL@CPhoneState@@IBEHXZ @ 61 NONAME ; int CPhoneState::NeedToSendToBackgroundL(void) const - ?SetCallHeaderTextsForCallComingInL@CPhoneState@@IAEXHHPAVTPhoneCmdParamCallHeaderData@@@Z @ 62 NONAME ; void CPhoneState::SetCallHeaderTextsForCallComingInL(int, int, class TPhoneCmdParamCallHeaderData *) - ?IsSimOk@CPhoneState@@QAEHXZ @ 63 NONAME ; int CPhoneState::IsSimOk(void) - ?ClearNumberEntryContentCache@CPhoneState@@IAEXXZ @ 64 NONAME ; void CPhoneState::ClearNumberEntryContentCache(void) - ?HandleCommandL@CPhoneStateIdle@@UAEHH@Z @ 65 NONAME ; int CPhoneStateIdle::HandleCommandL(int) - ?ViewCommandHandle@CPhoneStateHandle@@QAEPAVMPhoneViewCommandHandle@@XZ @ 66 NONAME ; class MPhoneViewCommandHandle * CPhoneStateHandle::ViewCommandHandle(void) - ?DialMultimediaCallL@CPhoneStateIdle@@IAEXXZ @ 67 NONAME ; void CPhoneStateIdle::DialMultimediaCallL(void) - ?DisconnectOutgoingCallL@CPhoneStateInCall@@IAEXXZ @ 68 NONAME ; void CPhoneStateInCall::DisconnectOutgoingCallL(void) - ?IsKeyLockOn@CPhoneState@@MBEHXZ @ 69 NONAME ; int CPhoneState::IsKeyLockOn(void) const - ??1CPhoneStateInCall@@UAE@XZ @ 70 NONAME ; CPhoneStateInCall::~CPhoneStateInCall(void) - ?CustomizedDialerMenuResourceIdL@CPhoneState@@IAEHXZ @ 71 NONAME ; int CPhoneState::CustomizedDialerMenuResourceIdL(void) - ?ShowReconnectQueryL@CPhoneReconnectQuery@@QAEXH@Z @ 72 NONAME ; void CPhoneReconnectQuery::ShowReconnectQueryL(int) - ?UpdateSilenceButtonDimming@CPhoneState@@IAEXXZ @ 73 NONAME ; void CPhoneState::UpdateSilenceButtonDimming(void) - ?SetNumberEntryVisibilityL@CPhoneState@@IAEXH@Z @ 74 NONAME ; void CPhoneState::SetNumberEntryVisibilityL(int) - ?HandleError@CPhoneUIController@@UAEXABUTPEErrorInfo@@@Z @ 75 NONAME ; void CPhoneUIController::HandleError(struct TPEErrorInfo const &) - ?ConstructL@CPhoneStateInCall@@MAEXXZ @ 76 NONAME ; void CPhoneStateInCall::ConstructL(void) - ?OnlyHashInNumberEntryL@CPhoneStateIdle@@MAEXXZ @ 77 NONAME ; void CPhoneStateIdle::OnlyHashInNumberEntryL(void) - ?IsVideoCallRingingL@CPhoneStateInCall@@MAEHXZ @ 78 NONAME ; int CPhoneStateInCall::IsVideoCallRingingL(void) - ?HandlePhoneForegroundEventL@CPhoneStateIdle@@UAEXXZ @ 79 NONAME ; void CPhoneStateIdle::HandlePhoneForegroundEventL(void) - ?HandleHoldSwitchL@CPhoneState@@QAEXXZ @ 80 NONAME ; void CPhoneState::HandleHoldSwitchL(void) - ?CloseDtmfQueryL@CPhoneStateInCall@@IAEXXZ @ 81 NONAME ; void CPhoneStateInCall::CloseDtmfQueryL(void) - ?DynInitMenuBarL@CPhoneState@@UAEXHPAVCEikMenuBar@@@Z @ 82 NONAME ; void CPhoneState::DynInitMenuBarL(int, class CEikMenuBar *) - ?HandleDtmfKeyToneL@CPhoneStateStartup@@EAEXABUTKeyEvent@@W4TEventCode@@@Z @ 83 NONAME ; void CPhoneStateStartup::HandleDtmfKeyToneL(struct TKeyEvent const &, enum TEventCode) - ?HandleNumberEntryEdited@CPhoneState@@MAEXXZ @ 84 NONAME ; void CPhoneState::HandleNumberEntryEdited(void) - ?ShowTextQueryL@CPhoneState@@IAEXHHHPAVTDes16@@H@Z @ 85 NONAME ; void CPhoneState::ShowTextQueryL(int, int, int, class TDes16 *, int) - ?DialMultimediaCallL@CPhoneState@@IAEXXZ @ 86 NONAME ; void CPhoneState::DialMultimediaCallL(void) - ?NewL@CPhoneUIController@@SAPAV1@PAVMPhoneViewCommandHandle@@@Z @ 87 NONAME ; class CPhoneUIController * CPhoneUIController::NewL(class MPhoneViewCommandHandle *) - ?HandleCreateNumberEntryL@CPhoneStateStartup@@EAEXABUTKeyEvent@@W4TEventCode@@@Z @ 88 NONAME ; void CPhoneStateStartup::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode) - ?CheckDisableHWKeysAndCallUIL@CPhoneState@@QAEXXZ @ 89 NONAME ; void CPhoneState::CheckDisableHWKeysAndCallUIL(void) - ?IsMenuBarVisibleL@CPhoneState@@UBEHXZ @ 90 NONAME ; int CPhoneState::IsMenuBarVisibleL(void) const - ?HandleErrorL@CPhoneState@@UAEXABUTPEErrorInfo@@@Z @ 91 NONAME ; void CPhoneState::HandleErrorL(struct TPEErrorInfo const &) - ?HandleCommandL@CPhoneStateCallSetup@@UAEHH@Z @ 92 NONAME ; int CPhoneStateCallSetup::HandleCommandL(int) - ?HandleAudioOutputChangedL@CPhoneState@@IAEXXZ @ 93 NONAME ; void CPhoneState::HandleAudioOutputChangedL(void) - ??1CPhoneUIController@@UAE@XZ @ 94 NONAME ; CPhoneUIController::~CPhoneUIController(void) - ?HandleKeyEventL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 95 NONAME ; void CPhoneState::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) - ?UpdateIncomingContextMenuL@CPhoneState@@MAEXH@Z @ 96 NONAME ; void CPhoneState::UpdateIncomingContextMenuL(int) - ?OpenMenuBarL@CPhoneStateInCall@@MAEXXZ @ 97 NONAME ; void CPhoneStateInCall::OpenMenuBarL(void) - ?UpdateIncomingCbaL@CPhoneCbaManager@@QAEXH@Z @ 98 NONAME ; void CPhoneCbaManager::UpdateIncomingCbaL(int) - ?SetTouchPaneButtonDisabled@CPhoneState@@IAEXH@Z @ 99 NONAME ; void CPhoneState::SetTouchPaneButtonDisabled(int) - ?ConstructL@CPhoneStateIncoming@@MAEXXZ @ 100 NONAME ; void CPhoneStateIncoming::ConstructL(void) - ?CreatePhoneEngineL@CPhoneStateMachine@@UAEPAVMPEPhoneModel@@AAVMEngineMonitor@@@Z @ 101 NONAME ; class MPEPhoneModel * CPhoneStateMachine::CreatePhoneEngineL(class MEngineMonitor &) - ?SetTouchPaneButtons@CPhoneState@@IAEXH@Z @ 102 NONAME ; void CPhoneState::SetTouchPaneButtons(int) - ?HandleIdleForegroundEventL@CPhoneStateStartup@@UAEXXZ @ 103 NONAME ; void CPhoneStateStartup::HandleIdleForegroundEventL(void) - ?CallFromNumberEntryL@CPhoneState@@IAEXXZ @ 104 NONAME ; void CPhoneState::CallFromNumberEntryL(void) - ?UpdateCbaL@CPhoneCbaManager@@QAEXH@Z @ 105 NONAME ; void CPhoneCbaManager::UpdateCbaL(int) - ?IsVideoCall@CPhoneState@@IAEHH@Z @ 106 NONAME ; int CPhoneState::IsVideoCall(int) - ?IsSwivelClosed@CPhoneState@@QBEHXZ @ 107 NONAME ; int CPhoneState::IsSwivelClosed(void) const - ?CloseCustomizedDialerL@CPhoneState@@QAEXXZ @ 108 NONAME ; void CPhoneState::CloseCustomizedDialerL(void) - ?HandlePhoneForegroundEventL@CPhoneUIController@@UAEXXZ @ 109 NONAME ; void CPhoneUIController::HandlePhoneForegroundEventL(void) - ?CheckIfRestoreNEContentAfterDtmfDialer@CPhoneState@@IAEXXZ @ 110 NONAME ; void CPhoneState::CheckIfRestoreNEContentAfterDtmfDialer(void) - ?UpdateInCallContextMenuL@CPhoneState@@UAEXXZ @ 111 NONAME ; void CPhoneState::UpdateInCallContextMenuL(void) - ?HandleNumericKeyEventL@CPhoneState@@MAEXABUTKeyEvent@@W4TEventCode@@@Z @ 112 NONAME ; void CPhoneState::HandleNumericKeyEventL(struct TKeyEvent const &, enum TEventCode) - ?SendGlobalErrorNoteL@CPhoneState@@QAEXH@Z @ 113 NONAME ; void CPhoneState::SendGlobalErrorNoteL(int) - ?IsAutoLockOn@CPhoneState@@UBEHXZ @ 114 NONAME ; int CPhoneState::IsAutoLockOn(void) const - ?UpdateCbaL@CPhoneStateCallSetup@@MAEXH@Z @ 115 NONAME ; void CPhoneStateCallSetup::UpdateCbaL(int) - ?RestoreNumberEntryContentL@CPhoneState@@IAEXXZ @ 116 NONAME ; void CPhoneState::RestoreNumberEntryContentL(void) - ?HandleKeyEventL@CPhoneStateIdle@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 117 NONAME ; void CPhoneStateIdle::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) - ?IsNumberEntryContentStored@CPhoneState@@IAEHXZ @ 118 NONAME ; int CPhoneState::IsNumberEntryContentStored(void) - ?IsVideoCallActiveL@CPhoneStateInCall@@MAEHXZ @ 119 NONAME ; int CPhoneStateInCall::IsVideoCallActiveL(void) - ?HandlePhoneStartupL@CPhoneStateStartup@@UAEXXZ @ 120 NONAME ; void CPhoneStateStartup::HandlePhoneStartupL(void) - ?DialVoiceCallL@CPhoneState@@IAEXXZ @ 121 NONAME ; void CPhoneState::DialVoiceCallL(void) - ?EndUiUpdate@CPhoneState@@IAEXXZ @ 122 NONAME ; void CPhoneState::EndUiUpdate(void) - ?HandleKeyPressDurationL@CPhoneStateIncoming@@UAEXW4TKeyCode@@VTTimeIntervalMicroSeconds@@@Z @ 123 NONAME ; void CPhoneStateIncoming::HandleKeyPressDurationL(enum TKeyCode, class TTimeIntervalMicroSeconds) - ?UpdateInCallCbaL@CPhoneStateInCall@@MAEXXZ @ 124 NONAME ; void CPhoneStateInCall::UpdateInCallCbaL(void) - ?EndTransEffect@CPhoneState@@QAEXXZ @ 125 NONAME ; void CPhoneState::EndTransEffect(void) - ?HandleEnvironmentChangeL@CPhoneState@@UAEXH@Z @ 126 NONAME ; void CPhoneState::HandleEnvironmentChangeL(int) - ?HandleKeyMessageL@CPhoneStateInCall@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 127 NONAME ; void CPhoneStateInCall::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode) - ?SetRingingTonePlaybackL@CPhoneState@@IAEXH@Z @ 128 NONAME ; void CPhoneState::SetRingingTonePlaybackL(int) - ?ProcessCommandL@CPhoneState@@UAEHH@Z @ 129 NONAME ; int CPhoneState::ProcessCommandL(int) - ?BeginUiUpdateLC@CPhoneState@@IAEXXZ @ 130 NONAME ; void CPhoneState::BeginUiUpdateLC(void) - ?DecreaseAudioVolumeL@CPhoneState@@IAEXXZ @ 131 NONAME ; void CPhoneState::DecreaseAudioVolumeL(void) - ?PhoneEngineInfo@CPhoneStateMachine@@UAEPAVMPEEngineInfo@@XZ @ 132 NONAME ; class MPEEngineInfo * CPhoneStateMachine::PhoneEngineInfo(void) - ?CreateNumberEntryL@CPhoneStateInCall@@IAEXXZ @ 133 NONAME ; void CPhoneStateInCall::CreateNumberEntryL(void) - ?HandleSystemEventL@CPhoneUIController@@UAEXABVTWsEvent@@@Z @ 134 NONAME ; void CPhoneUIController::HandleSystemEventL(class TWsEvent const &) - ?DynInitMenuPaneL@CPhoneUIController@@UAEXHPAVCEikMenuPane@@@Z @ 135 NONAME ; void CPhoneUIController::DynInitMenuPaneL(int, class CEikMenuPane *) - ??0CPhoneStateStartup@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 136 NONAME ; CPhoneStateStartup::CPhoneStateStartup(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) - ?GetRemoteInfoDataL@CPhoneState@@IAEXHAAVTDes16@@@Z @ 137 NONAME ; void CPhoneState::GetRemoteInfoDataL(int, class TDes16 &) - ?SetDivertIndication@CPhoneState@@UAEXH@Z @ 138 NONAME ; void CPhoneState::SetDivertIndication(int) - ?UpdateCbaL@CPhoneStateInCall@@MAEXH@Z @ 139 NONAME ; void CPhoneStateInCall::UpdateCbaL(int) - ?SetCallId@CPhoneStateMachine@@UAEXH@Z @ 140 NONAME ; void CPhoneStateMachine::SetCallId(int) - ?ProcessCommandL@CPhoneUIController@@UAEHH@Z @ 141 NONAME ; int CPhoneUIController::ProcessCommandL(int) - ?DisplayHeaderForCallComingInL@CPhoneState@@IAEXHH@Z @ 142 NONAME ; void CPhoneState::DisplayHeaderForCallComingInL(int, int) - ??0CPhoneStateIdle@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 143 NONAME ; CPhoneStateIdle::CPhoneStateIdle(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) - ?SendPhoneEngineMessage@CPhoneStateMachine@@UAEXH@Z @ 144 NONAME ; void CPhoneStateMachine::SendPhoneEngineMessage(int) - ??0CPhoneStateCallSetup@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 145 NONAME ; CPhoneStateCallSetup::CPhoneStateCallSetup(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) - ??0CPhoneState@@QAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 146 NONAME ; CPhoneState::CPhoneState(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) - ?HandleDtmfKeyToneL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 147 NONAME ; void CPhoneState::HandleDtmfKeyToneL(struct TKeyEvent const &, enum TEventCode) - ?HandleKeyMessageL@CPhoneStateIdle@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 148 NONAME ; void CPhoneStateIdle::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode) - ?HandleForegroundEventL@CPhoneUIController@@UAEXH@Z @ 149 NONAME ; void CPhoneUIController::HandleForegroundEventL(int) - ?HandleSendCommandL@CPhoneStateIdle@@MAEXXZ @ 150 NONAME ; void CPhoneStateIdle::HandleSendCommandL(void) - ?HandleCommandL@CPhoneUIController@@UAEHH@Z @ 151 NONAME ; int CPhoneUIController::HandleCommandL(int) - ?HandleCreateNumberEntryL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 152 NONAME ; void CPhoneState::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode) - ?DisableHWKeysL@CPhoneState@@QAEXXZ @ 153 NONAME ; void CPhoneState::DisableHWKeysL(void) - ?DisplayHeaderForOutgoingCallL@CPhoneState@@IAEXH@Z @ 154 NONAME ; void CPhoneState::DisplayHeaderForOutgoingCallL(int) - ?GetBlockedKeyList@CPhoneState@@UBEABV?$RArray@H@@XZ @ 155 NONAME ; class RArray const & CPhoneState::GetBlockedKeyList(void) const - ?HandlePhoneEngineMessageL@CPhoneStateInCall@@UAEXHH@Z @ 156 NONAME ; void CPhoneStateInCall::HandlePhoneEngineMessageL(int, int) - ?IsSpeedDialNumber@CPhoneStateIdle@@IBEHABVTDesC16@@@Z @ 157 NONAME ; int CPhoneStateIdle::IsSpeedDialNumber(class TDesC16 const &) const - ?IsNumberEntryUsedL@CPhoneState@@UAEHXZ @ 158 NONAME ; int CPhoneState::IsNumberEntryUsedL(void) - ?PhoneStorage@CPhoneStateMachine@@UAEPAVMPhoneStorage@@XZ @ 159 NONAME ; class MPhoneStorage * CPhoneStateMachine::PhoneStorage(void) - ??1CPhoneState@@UAE@XZ @ 160 NONAME ; CPhoneState::~CPhoneState(void) - ?HandleCreateNumberEntryL@CPhoneStateCallSetup@@MAEXABUTKeyEvent@@W4TEventCode@@@Z @ 161 NONAME ; void CPhoneStateCallSetup::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode) - ?HandlePhoneEngineMessageL@CPhoneStateCallSetup@@UAEXHH@Z @ 162 NONAME ; void CPhoneStateCallSetup::HandlePhoneEngineMessageL(int, int) - ?HandlePhoneFocusLostEventL@CPhoneState@@UAEXXZ @ 163 NONAME ; void CPhoneState::HandlePhoneFocusLostEventL(void) - ??1CPhoneStateMachine@@UAE@XZ @ 164 NONAME ; CPhoneStateMachine::~CPhoneStateMachine(void) - ?HandleIdleForegroundEventL@CPhoneState@@UAEXXZ @ 165 NONAME ; void CPhoneState::HandleIdleForegroundEventL(void) - ?DynInitMenuPaneL@CPhoneState@@UAEXHPAVCEikMenuPane@@@Z @ 166 NONAME ; void CPhoneState::DynInitMenuPaneL(int, class CEikMenuPane *) - ?IsDTMFEditorVisibleL@CPhoneState@@IBEHXZ @ 167 NONAME ; int CPhoneState::IsDTMFEditorVisibleL(void) const - ?ConstructL@CPhoneStateCallSetup@@MAEXXZ @ 168 NONAME ; void CPhoneStateCallSetup::ConstructL(void) - ?BeginTransEffectLC@CPhoneState@@QAEXW4TStateTransEffectType@@@Z @ 169 NONAME ; void CPhoneState::BeginTransEffectLC(enum TStateTransEffectType) - ?HandleMessage@CPhoneUIController@@UAEXHH@Z @ 170 NONAME ; void CPhoneUIController::HandleMessage(int, int) - ?HandleSystemEventL@CPhoneState@@UAEXABVTWsEvent@@@Z @ 171 NONAME ; void CPhoneState::HandleSystemEventL(class TWsEvent const &) - ?DisplayCallSetupL@CPhoneStateIdle@@IAEXH@Z @ 172 NONAME ; void CPhoneStateIdle::DisplayCallSetupL(int) - ?ConstructL@CPhoneStateStartup@@MAEXXZ @ 173 NONAME ; void CPhoneStateStartup::ConstructL(void) - ?HandleKeyMessageL@CPhoneStateStartup@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 174 NONAME ; void CPhoneStateStartup::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode) - ?ShowNoteL@CPhoneState@@IAEXH@Z @ 175 NONAME ; void CPhoneState::ShowNoteL(int) - ?HandlePropertyChangedL@CPhoneState@@UAEXABVTUid@@IH@Z @ 176 NONAME ; void CPhoneState::HandlePropertyChangedL(class TUid const &, unsigned int, int) - ?IsAnyQueryActiveL@CPhoneState@@QAEHXZ @ 177 NONAME ; int CPhoneState::IsAnyQueryActiveL(void) - ?State@CPhoneStateMachine@@UAEPAVMPhoneState@@XZ @ 178 NONAME ; class MPhoneState * CPhoneStateMachine::State(void) - ?SetHandsfreeModeL@CPhoneState@@IAEXH@Z @ 179 NONAME ; void CPhoneState::SetHandsfreeModeL(int) - ?IsCustomizedDialerVisibleL@CPhoneState@@QBEHXZ @ 180 NONAME ; int CPhoneState::IsCustomizedDialerVisibleL(void) const - ?UpdateInCallCbaL@CPhoneStateCallSetup@@MAEXXZ @ 181 NONAME ; void CPhoneStateCallSetup::UpdateInCallCbaL(void) - ?HandleNumberEntryClearedL@CPhoneStateInCall@@MAEXXZ @ 182 NONAME ; void CPhoneStateInCall::HandleNumberEntryClearedL(void) - ??0CPhoneStateIncoming@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 183 NONAME ; CPhoneStateIncoming::CPhoneStateIncoming(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) - ??1CPhoneStateIncoming@@UAE@XZ @ 184 NONAME ; CPhoneStateIncoming::~CPhoneStateIncoming(void) - ?HandleKeyLockEnabled@CPhoneUIController@@UAEXH@Z @ 185 NONAME ; void CPhoneUIController::HandleKeyLockEnabled(int) - ?DisableCallUIL@CPhoneState@@QAEXXZ @ 186 NONAME ; void CPhoneState::DisableCallUIL(void) - ?DeleteTouchPaneButtons@CPhoneState@@IAEXXZ @ 187 NONAME ; void CPhoneState::DeleteTouchPaneButtons(void) - ?ProcessCommandL@CPhoneStateIdle@@UAEHH@Z @ 188 NONAME ; int CPhoneStateIdle::ProcessCommandL(int) - ?IsNoteVisibleL@CPhoneState@@MAEHXZ @ 189 NONAME ; int CPhoneState::IsNoteVisibleL(void) - ?DynInitMenuBarL@CPhoneUIController@@UAEXHPAVCEikMenuBar@@@Z @ 190 NONAME ; void CPhoneUIController::DynInitMenuBarL(int, class CEikMenuBar *) - ?IsAlphanumericSupportedAndCharInput@CPhoneState@@MAEHABUTKeyEvent@@@Z @ 191 NONAME ; int CPhoneState::IsAlphanumericSupportedAndCharInput(struct TKeyEvent const &) - ?HandlePhoneEngineMessageL@CPhoneStateStartup@@UAEXHH@Z @ 192 NONAME ; void CPhoneStateStartup::HandlePhoneEngineMessageL(int, int) - ?HandleKeyEventL@CPhoneStateIncoming@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 193 NONAME ; void CPhoneStateIncoming::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) - ?HandleKeyEventL@CPhoneStateStartup@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 194 NONAME ; void CPhoneStateStartup::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) - ?HandleNumberEntryClearedL@CPhoneState@@MAEXXZ @ 195 NONAME ; void CPhoneState::HandleNumberEntryClearedL(void) - ?OnlyHashInNumberEntryL@CPhoneState@@MAEXXZ @ 196 NONAME ; void CPhoneState::OnlyHashInNumberEntryL(void) - ?IncreaseAudioVolumeL@CPhoneState@@IAEXXZ @ 197 NONAME ; void CPhoneState::IncreaseAudioVolumeL(void) - ?ConstructL@CPhoneStateIdle@@MAEXXZ @ 198 NONAME ; void CPhoneStateIdle::ConstructL(void) - ?CheckIfShowCallTerminationNote@CPhoneState@@MAEHXZ @ 199 NONAME ; int CPhoneState::CheckIfShowCallTerminationNote(void) - ?SetCallHeaderType@CPhoneState@@IAEXW4TPhoneCallTypeFlags@CBubbleManager@@@Z @ 200 NONAME ; void CPhoneState::SetCallHeaderType(enum CBubbleManager::TPhoneCallTypeFlags) - ?SendGlobalInfoNoteL@CPhoneState@@QAEXH@Z @ 201 NONAME ; void CPhoneState::SendGlobalInfoNoteL(int) - ?DisplayIdleScreenL@CPhoneState@@IAEXXZ @ 202 NONAME ; void CPhoneState::DisplayIdleScreenL(void) - ?StartShowSecurityNoteL@CPhoneState@@IAEXXZ @ 203 NONAME ; void CPhoneState::StartShowSecurityNoteL(void) - ?StoreNumberEntryContentL@CPhoneState@@IAEXXZ @ 204 NONAME ; void CPhoneState::StoreNumberEntryContentL(void) - ?SetBTHandsfreeModeL@CPhoneState@@IAEXH@Z @ 205 NONAME ; void CPhoneState::SetBTHandsfreeModeL(int) - ?HandlePhoneEngineMessageL@CPhoneStateIncoming@@UAEXHH@Z @ 206 NONAME ; void CPhoneStateIncoming::HandlePhoneEngineMessageL(int, int) - ?SetDefaultFlagsL@CPhoneState@@IAEXXZ @ 207 NONAME ; void CPhoneState::SetDefaultFlagsL(void) - ?HandleCommandL@CPhoneStateInCall@@UAEHH@Z @ 208 NONAME ; int CPhoneStateInCall::HandleCommandL(int) - ?DialVoiceCallL@CPhoneStateIdle@@IAEXXZ @ 209 NONAME ; void CPhoneStateIdle::DialVoiceCallL(void) - ?UpdateRemoteInfoDataL@CPhoneState@@IAEXH@Z @ 210 NONAME ; void CPhoneState::UpdateRemoteInfoDataL(int) - ?GetRingingCallL@CPhoneStateInCall@@MAEHXZ @ 211 NONAME ; int CPhoneStateInCall::GetRingingCallL(void) - ?HandleIdleForegroundEventL@CPhoneUIController@@UAEXXZ @ 212 NONAME ; void CPhoneUIController::HandleIdleForegroundEventL(void) - ?HandlePhoneForegroundEventL@CPhoneState@@UAEXXZ @ 213 NONAME ; void CPhoneState::HandlePhoneForegroundEventL(void) - ?HandleForegroundEventL@CPhoneState@@UAEXH@Z @ 214 NONAME ; void CPhoneState::HandleForegroundEventL(int) - ?DisplayIncomingCallL@CPhoneStateIdle@@IAEXH@Z @ 215 NONAME ; void CPhoneStateIdle::DisplayIncomingCallL(int) - ?HandleRemConCommandL@CPhoneState@@UAEHW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 216 NONAME ; int CPhoneState::HandleRemConCommandL(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction) - ??1CPhoneStateIdle@@UAE@XZ @ 217 NONAME ; CPhoneStateIdle::~CPhoneStateIdle(void) - ?PhoneNumberFromEntryLC@CPhoneState@@IAEPAVHBufC16@@XZ @ 218 NONAME ; class HBufC16 * CPhoneState::PhoneNumberFromEntryLC(void) - ?BaseConstructL@CPhoneState@@QAEXXZ @ 219 NONAME ; void CPhoneState::BaseConstructL(void) - ?HandlePhoneStartupL@CPhoneUIController@@UAEXXZ @ 220 NONAME ; void CPhoneUIController::HandlePhoneStartupL(void) - ?SpeedDialL@CPhoneStateIdle@@IAEXABIW4TDialInitiationMethod@1@@Z @ 221 NONAME ; void CPhoneStateIdle::SpeedDialL(unsigned int const &, enum CPhoneStateIdle::TDialInitiationMethod) - ?SetTouchPaneButtonEnabled@CPhoneState@@IAEXH@Z @ 222 NONAME ; void CPhoneState::SetTouchPaneButtonEnabled(int) - ?SetPhoneEngine@CPhoneStateMachine@@UAEXPAVMPEPhoneModel@@@Z @ 223 NONAME ; void CPhoneStateMachine::SetPhoneEngine(class MPEPhoneModel *) - ?SpeedDialCanceledL@CPhoneStateIdle@@IAEXABI@Z @ 224 NONAME ; void CPhoneStateIdle::SpeedDialCanceledL(unsigned int const &) - ?CloseDTMFEditorL@CPhoneState@@IAEXXZ @ 225 NONAME ; void CPhoneState::CloseDTMFEditorL(void) - ?SetTouchPaneVisible@CPhoneState@@IAEXH@Z @ 226 NONAME ; void CPhoneState::SetTouchPaneVisible(int) - ?HandlePhoneFocusLostEventL@CPhoneUIController@@UAEXXZ @ 227 NONAME ; void CPhoneUIController::HandlePhoneFocusLostEventL(void) - ?HandleKeyLockEnabled@CPhoneStateIncoming@@UAEXH@Z @ 228 NONAME ; void CPhoneStateIncoming::HandleKeyLockEnabled(int) - ??0CPhoneStateMachine@@IAE@PAVMPhoneViewCommandHandle@@@Z @ 229 NONAME ; CPhoneStateMachine::CPhoneStateMachine(class MPhoneViewCommandHandle *) - ??1CPhoneStateStartup@@UAE@XZ @ 230 NONAME ; CPhoneStateStartup::~CPhoneStateStartup(void) - ?HandleKeyMessageL@CPhoneState@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 231 NONAME ; void CPhoneState::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode) - ?SetToolbarButtonLoudspeakerEnabled@CPhoneState@@IAEXXZ @ 232 NONAME ; void CPhoneState::SetToolbarButtonLoudspeakerEnabled(void) - ?SetToolbarDimming@CPhoneState@@IAEXH@Z @ 233 NONAME ; void CPhoneState::SetToolbarDimming(int) + ?DisconnectCallL@CPhoneState@@MAEXXZ @ 8 NONAME ; void CPhoneState::DisconnectCallL(void) + ?SetCbaL@CPhoneCbaManager@@QAEXH@Z @ 9 NONAME ; void CPhoneCbaManager::SetCbaL(int) + ?InstanceL@CPhoneReconnectQuery@@SAPAV1@XZ @ 10 NONAME ; class CPhoneReconnectQuery * CPhoneReconnectQuery::InstanceL(void) + ?HandlePhoneStartupL@CPhoneState@@UAEXXZ @ 11 NONAME ; void CPhoneState::HandlePhoneStartupL(void) + ?HandlePhoneFocusLostEventL@CPhoneStateIdle@@UAEXXZ @ 12 NONAME ; void CPhoneStateIdle::HandlePhoneFocusLostEventL(void) + ?HandleIdleL@CPhoneStateInCall@@IAEXH@Z @ 13 NONAME ; void CPhoneStateInCall::HandleIdleL(int) + ?ShowQueryL@CPhoneState@@IAEXH@Z @ 14 NONAME ; void CPhoneState::ShowQueryL(int) + ?PhoneNumberAvailableInPhoneEngineL@CPhoneStateInCall@@IAEXH@Z @ 15 NONAME ; void CPhoneStateInCall::PhoneNumberAvailableInPhoneEngineL(int) + ?DisplayCallTerminationNoteL@CPhoneState@@IAEXXZ @ 16 NONAME ; void CPhoneState::DisplayCallTerminationNoteL(void) + ??0CPhoneStateInCall@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 17 NONAME ; CPhoneStateInCall::CPhoneStateInCall(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) + ?HandleNumberLongKeyPressL@CPhoneStateIdle@@IAEXXZ @ 18 NONAME ; void CPhoneStateIdle::HandleNumberLongKeyPressL(void) + ?PhoneEngine@CPhoneStateMachine@@UAEPAVMPEPhoneModel@@XZ @ 19 NONAME ; class MPEPhoneModel * CPhoneStateMachine::PhoneEngine(void) + ?OpenMenuBarL@CPhoneStateCallSetup@@MAEXXZ @ 20 NONAME ; void CPhoneStateCallSetup::OpenMenuBarL(void) + ??1CPhoneStateCallSetup@@UAE@XZ @ 21 NONAME ; CPhoneStateCallSetup::~CPhoneStateCallSetup(void) + ?HandleEnvironmentChangeL@CPhoneUIController@@UAEXH@Z @ 22 NONAME ; void CPhoneUIController::HandleEnvironmentChangeL(int) + ?SetToolbarButtonLoudspeakerEnabled@CPhoneState@@IAEXXZ @ 23 NONAME ; void CPhoneState::SetToolbarButtonLoudspeakerEnabled(void) + ?Instance@CPhoneStateHandle@@SAPAV1@XZ @ 24 NONAME ; class CPhoneStateHandle * CPhoneStateHandle::Instance(void) + ?HandleNumberEntryClearedL@CPhoneStateIdle@@MAEXXZ @ 25 NONAME ; void CPhoneStateIdle::HandleNumberEntryClearedL(void) + ?DynInitMenuPaneL@CPhoneStateIncoming@@MAEXHPAVCEikMenuPane@@@Z @ 26 NONAME ; void CPhoneStateIncoming::DynInitMenuPaneL(int, class CEikMenuPane *) + ?HandleCommandL@CPhoneState@@UAEHH@Z @ 27 NONAME ; int CPhoneState::HandleCommandL(int) + ?StartAlsLineChangeTimerL@CPhoneState@@IAEXXZ @ 28 NONAME ; void CPhoneState::StartAlsLineChangeTimerL(void) + ?IsNumberEntryVisibleL@CPhoneState@@QAEHXZ @ 29 NONAME ; int CPhoneState::IsNumberEntryVisibleL(void) + ?RetainPreviousKeylockStateL@CPhoneState@@QAEXXZ @ 30 NONAME ; void CPhoneState::RetainPreviousKeylockStateL(void) + ?HandlePhoneEngineMessageL@CPhoneStateIdle@@UAEXHH@Z @ 31 NONAME ; void CPhoneStateIdle::HandlePhoneEngineMessageL(int, int) + ?HandleDialingL@CPhoneStateIdle@@MAEXH@Z @ 32 NONAME ; void CPhoneStateIdle::HandleDialingL(int) + ?CustomizedDialerCbaResourceIdL@CPhoneState@@IAEHXZ @ 33 NONAME ; int CPhoneState::CustomizedDialerCbaResourceIdL(void) + ?CaptureKeysDuringCallNotificationL@CPhoneState@@IAEXH@Z @ 34 NONAME ; void CPhoneState::CaptureKeysDuringCallNotificationL(int) + ?HandleKeyPressDurationL@CPhoneState@@UAEXW4TKeyCode@@VTTimeIntervalMicroSeconds@@@Z @ 35 NONAME ; void CPhoneState::HandleKeyPressDurationL(enum TKeyCode, class TTimeIntervalMicroSeconds) + ?ChangeState@CPhoneStateMachine@@UAEXH@Z @ 36 NONAME ; void CPhoneStateMachine::ChangeState(int) + ?IsSimStateNotPresentWithSecurityModeEnabled@CPhoneState@@IAEHXZ @ 37 NONAME ; int CPhoneState::IsSimStateNotPresentWithSecurityModeEnabled(void) + ?HandlePhoneEngineMessageL@CPhoneState@@UAEXHH@Z @ 38 NONAME ; void CPhoneState::HandlePhoneEngineMessageL(int, int) + ?HandleNumberEntryClearedL@CPhoneStateIncoming@@UAEXXZ @ 39 NONAME ; void CPhoneStateIncoming::HandleNumberEntryClearedL(void) + ?HandleKeyEventL@CPhoneUIController@@UAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 40 NONAME ; enum TKeyResponse CPhoneUIController::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) + ?HandleRemConCommandL@CPhoneStateIdle@@MAEHW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 41 NONAME ; int CPhoneStateIdle::HandleRemConCommandL(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction) + ?HandleAudioPlayStoppedL@CPhoneStateIncoming@@MAEXXZ @ 42 NONAME ; void CPhoneStateIncoming::HandleAudioPlayStoppedL(void) + ?HandleCenRepChangeL@CPhoneState@@UAEXABVTUid@@I@Z @ 43 NONAME ; void CPhoneState::HandleCenRepChangeL(class TUid const &, unsigned int) + ?HandleLongHashL@CPhoneState@@UAEXXZ @ 44 NONAME ; void CPhoneState::HandleLongHashL(void) + ?DialL@CPhoneStateIdle@@MAEXABVTDesC16@@W4TPhoneNumberType@@W4TDialInitiationMethod@1@@Z @ 45 NONAME ; void CPhoneStateIdle::DialL(class TDesC16 const &, enum TPhoneNumberType, enum CPhoneStateIdle::TDialInitiationMethod) + ?ShowNumberBusyNoteL@CPhoneState@@IAEXXZ @ 46 NONAME ; void CPhoneState::ShowNumberBusyNoteL(void) + ?HandleNumberEntryClearedL@CPhoneStateCallSetup@@MAEXXZ @ 47 NONAME ; void CPhoneStateCallSetup::HandleNumberEntryClearedL(void) + ?HandleIdleForegroundEventL@CPhoneStateIdle@@UAEXXZ @ 48 NONAME ; void CPhoneStateIdle::HandleIdleForegroundEventL(void) + ?HandleDisconnectingL@CPhoneState@@IAEXH@Z @ 49 NONAME ; void CPhoneState::HandleDisconnectingL(int) + ?HandleAudioMuteChangedL@CPhoneState@@IAEXXZ @ 50 NONAME ; void CPhoneState::HandleAudioMuteChangedL(void) + ?HandleKeyLockEnabled@CPhoneState@@UAEXH@Z @ 51 NONAME ; void CPhoneState::HandleKeyLockEnabled(int) + ?HandleCommandL@CPhoneStateIncoming@@UAEHH@Z @ 52 NONAME ; int CPhoneStateIncoming::HandleCommandL(int) + ?UpdateSingleActiveCallL@CPhoneState@@IAEXH@Z @ 53 NONAME ; void CPhoneState::UpdateSingleActiveCallL(int) + ?IsOnScreenDialerSupported@CPhoneState@@IBEHXZ @ 54 NONAME ; int CPhoneState::IsOnScreenDialerSupported(void) const + ?SimState@CPhoneState@@IBE?AW4TPESimState@@XZ @ 55 NONAME ; enum TPESimState CPhoneState::SimState(void) const + ?HandleKeyEventL@CPhoneStateCallSetup@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 56 NONAME ; void CPhoneStateCallSetup::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) + ?SetupIdleScreenInBackgroundL@CPhoneState@@IAEXXZ @ 57 NONAME ; void CPhoneState::SetupIdleScreenInBackgroundL(void) + ?SendGlobalWarningNoteL@CPhoneState@@IAEXH@Z @ 58 NONAME ; void CPhoneState::SendGlobalWarningNoteL(int) + ?CompleteSatRequestL@CPhoneState@@IAEXH@Z @ 59 NONAME ; void CPhoneState::CompleteSatRequestL(int) + ?NewL@CPhoneStateStartup@@SAPAV1@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 60 NONAME ; class CPhoneStateStartup * CPhoneStateStartup::NewL(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) + ?LaunchNewCallQueryL@CPhoneStateInCall@@IAEXXZ @ 61 NONAME ; void CPhoneStateInCall::LaunchNewCallQueryL(void) + ?NeedToSendToBackgroundL@CPhoneState@@IBEHXZ @ 62 NONAME ; int CPhoneState::NeedToSendToBackgroundL(void) const + ?SetCallHeaderTextsForCallComingInL@CPhoneState@@IAEXHHPAVTPhoneCmdParamCallHeaderData@@@Z @ 63 NONAME ; void CPhoneState::SetCallHeaderTextsForCallComingInL(int, int, class TPhoneCmdParamCallHeaderData *) + ?IsSimOk@CPhoneState@@QAEHXZ @ 64 NONAME ; int CPhoneState::IsSimOk(void) + ?ClearNumberEntryContentCache@CPhoneState@@IAEXXZ @ 65 NONAME ; void CPhoneState::ClearNumberEntryContentCache(void) + ?HandleCommandL@CPhoneStateIdle@@UAEHH@Z @ 66 NONAME ; int CPhoneStateIdle::HandleCommandL(int) + ?ViewCommandHandle@CPhoneStateHandle@@QAEPAVMPhoneViewCommandHandle@@XZ @ 67 NONAME ; class MPhoneViewCommandHandle * CPhoneStateHandle::ViewCommandHandle(void) + ?DialMultimediaCallL@CPhoneStateIdle@@IAEXXZ @ 68 NONAME ; void CPhoneStateIdle::DialMultimediaCallL(void) + ?DisconnectOutgoingCallL@CPhoneStateInCall@@IAEXXZ @ 69 NONAME ; void CPhoneStateInCall::DisconnectOutgoingCallL(void) + ?IsKeyLockOn@CPhoneState@@MBEHXZ @ 70 NONAME ; int CPhoneState::IsKeyLockOn(void) const + ??1CPhoneStateInCall@@UAE@XZ @ 71 NONAME ; CPhoneStateInCall::~CPhoneStateInCall(void) + ?CustomizedDialerMenuResourceIdL@CPhoneState@@IAEHXZ @ 72 NONAME ; int CPhoneState::CustomizedDialerMenuResourceIdL(void) + ?ShowReconnectQueryL@CPhoneReconnectQuery@@QAEXH@Z @ 73 NONAME ; void CPhoneReconnectQuery::ShowReconnectQueryL(int) + ?UpdateSilenceButtonDimming@CPhoneState@@IAEXXZ @ 74 NONAME ; void CPhoneState::UpdateSilenceButtonDimming(void) + ?SetNumberEntryVisibilityL@CPhoneState@@IAEXH@Z @ 75 NONAME ; void CPhoneState::SetNumberEntryVisibilityL(int) + ?HandleError@CPhoneUIController@@UAEXABUTPEErrorInfo@@@Z @ 76 NONAME ; void CPhoneUIController::HandleError(struct TPEErrorInfo const &) + ?ConstructL@CPhoneStateInCall@@MAEXXZ @ 77 NONAME ; void CPhoneStateInCall::ConstructL(void) + ?OnlyHashInNumberEntryL@CPhoneStateIdle@@MAEXXZ @ 78 NONAME ; void CPhoneStateIdle::OnlyHashInNumberEntryL(void) + ?IsVideoCallRingingL@CPhoneStateInCall@@MAEHXZ @ 79 NONAME ; int CPhoneStateInCall::IsVideoCallRingingL(void) + ?HandlePhoneForegroundEventL@CPhoneStateIdle@@UAEXXZ @ 80 NONAME ; void CPhoneStateIdle::HandlePhoneForegroundEventL(void) + ?HandleHoldSwitchL@CPhoneState@@QAEXXZ @ 81 NONAME ; void CPhoneState::HandleHoldSwitchL(void) + ?CloseDtmfQueryL@CPhoneStateInCall@@IAEXXZ @ 82 NONAME ; void CPhoneStateInCall::CloseDtmfQueryL(void) + ?DynInitMenuBarL@CPhoneState@@UAEXHPAVCEikMenuBar@@@Z @ 83 NONAME ; void CPhoneState::DynInitMenuBarL(int, class CEikMenuBar *) + ?HandleDtmfKeyToneL@CPhoneStateStartup@@EAEXABUTKeyEvent@@W4TEventCode@@@Z @ 84 NONAME ; void CPhoneStateStartup::HandleDtmfKeyToneL(struct TKeyEvent const &, enum TEventCode) + ?HandleNumberEntryEdited@CPhoneState@@MAEXXZ @ 85 NONAME ; void CPhoneState::HandleNumberEntryEdited(void) + ?ShowTextQueryL@CPhoneState@@IAEXHHHPAVTDes16@@H@Z @ 86 NONAME ; void CPhoneState::ShowTextQueryL(int, int, int, class TDes16 *, int) + ?DialMultimediaCallL@CPhoneState@@IAEXXZ @ 87 NONAME ; void CPhoneState::DialMultimediaCallL(void) + ?NewL@CPhoneUIController@@SAPAV1@PAVMPhoneViewCommandHandle@@@Z @ 88 NONAME ; class CPhoneUIController * CPhoneUIController::NewL(class MPhoneViewCommandHandle *) + ?HandleCreateNumberEntryL@CPhoneStateStartup@@EAEXABUTKeyEvent@@W4TEventCode@@@Z @ 89 NONAME ; void CPhoneStateStartup::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode) + ?CheckDisableHWKeysAndCallUIL@CPhoneState@@QAEXXZ @ 90 NONAME ; void CPhoneState::CheckDisableHWKeysAndCallUIL(void) + ?IsMenuBarVisibleL@CPhoneState@@UBEHXZ @ 91 NONAME ; int CPhoneState::IsMenuBarVisibleL(void) const + ?HandleErrorL@CPhoneState@@UAEXABUTPEErrorInfo@@@Z @ 92 NONAME ; void CPhoneState::HandleErrorL(struct TPEErrorInfo const &) + ?HandleCommandL@CPhoneStateCallSetup@@UAEHH@Z @ 93 NONAME ; int CPhoneStateCallSetup::HandleCommandL(int) + ?HandleAudioOutputChangedL@CPhoneState@@IAEXXZ @ 94 NONAME ; void CPhoneState::HandleAudioOutputChangedL(void) + ??1CPhoneUIController@@UAE@XZ @ 95 NONAME ; CPhoneUIController::~CPhoneUIController(void) + ?HandleKeyEventL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 96 NONAME ; void CPhoneState::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) + ?UpdateIncomingContextMenuL@CPhoneState@@MAEXH@Z @ 97 NONAME ; void CPhoneState::UpdateIncomingContextMenuL(int) + ?OpenMenuBarL@CPhoneStateInCall@@MAEXXZ @ 98 NONAME ; void CPhoneStateInCall::OpenMenuBarL(void) + ?UpdateIncomingCbaL@CPhoneCbaManager@@QAEXH@Z @ 99 NONAME ; void CPhoneCbaManager::UpdateIncomingCbaL(int) + ?SetTouchPaneButtonDisabled@CPhoneState@@IAEXH@Z @ 100 NONAME ; void CPhoneState::SetTouchPaneButtonDisabled(int) + ?ConstructL@CPhoneStateIncoming@@MAEXXZ @ 101 NONAME ; void CPhoneStateIncoming::ConstructL(void) + ?CreatePhoneEngineL@CPhoneStateMachine@@UAEPAVMPEPhoneModel@@AAVMEngineMonitor@@@Z @ 102 NONAME ; class MPEPhoneModel * CPhoneStateMachine::CreatePhoneEngineL(class MEngineMonitor &) + ?SetTouchPaneButtons@CPhoneState@@IAEXH@Z @ 103 NONAME ; void CPhoneState::SetTouchPaneButtons(int) + ?HandleIdleForegroundEventL@CPhoneStateStartup@@UAEXXZ @ 104 NONAME ; void CPhoneStateStartup::HandleIdleForegroundEventL(void) + ?CallFromNumberEntryL@CPhoneState@@IAEXXZ @ 105 NONAME ; void CPhoneState::CallFromNumberEntryL(void) + ?UpdateCbaL@CPhoneCbaManager@@QAEXH@Z @ 106 NONAME ; void CPhoneCbaManager::UpdateCbaL(int) + ?IsVideoCall@CPhoneState@@IAEHH@Z @ 107 NONAME ; int CPhoneState::IsVideoCall(int) + ?IsSwivelClosed@CPhoneState@@QBEHXZ @ 108 NONAME ; int CPhoneState::IsSwivelClosed(void) const + ?CloseCustomizedDialerL@CPhoneState@@QAEXXZ @ 109 NONAME ; void CPhoneState::CloseCustomizedDialerL(void) + ?HandlePhoneForegroundEventL@CPhoneUIController@@UAEXXZ @ 110 NONAME ; void CPhoneUIController::HandlePhoneForegroundEventL(void) + ?CheckIfRestoreNEContentAfterDtmfDialer@CPhoneState@@IAEXXZ @ 111 NONAME ; void CPhoneState::CheckIfRestoreNEContentAfterDtmfDialer(void) + ?UpdateInCallContextMenuL@CPhoneState@@UAEXXZ @ 112 NONAME ; void CPhoneState::UpdateInCallContextMenuL(void) + ?HandleNumericKeyEventL@CPhoneState@@MAEXABUTKeyEvent@@W4TEventCode@@@Z @ 113 NONAME ; void CPhoneState::HandleNumericKeyEventL(struct TKeyEvent const &, enum TEventCode) + ?SetToolbarDimming@CPhoneState@@IAEXH@Z @ 114 NONAME ; void CPhoneState::SetToolbarDimming(int) + ?SendGlobalErrorNoteL@CPhoneState@@QAEXH@Z @ 115 NONAME ; void CPhoneState::SendGlobalErrorNoteL(int) + ?IsAutoLockOn@CPhoneState@@UBEHXZ @ 116 NONAME ; int CPhoneState::IsAutoLockOn(void) const + ?UpdateCbaL@CPhoneStateCallSetup@@MAEXH@Z @ 117 NONAME ; void CPhoneStateCallSetup::UpdateCbaL(int) + ?RestoreNumberEntryContentL@CPhoneState@@IAEXXZ @ 118 NONAME ; void CPhoneState::RestoreNumberEntryContentL(void) + ?HandleKeyEventL@CPhoneStateIdle@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 119 NONAME ; void CPhoneStateIdle::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) + ?IsNumberEntryContentStored@CPhoneState@@IAEHXZ @ 120 NONAME ; int CPhoneState::IsNumberEntryContentStored(void) + ?IsVideoCallActiveL@CPhoneStateInCall@@MAEHXZ @ 121 NONAME ; int CPhoneStateInCall::IsVideoCallActiveL(void) + ?HandlePhoneStartupL@CPhoneStateStartup@@UAEXXZ @ 122 NONAME ; void CPhoneStateStartup::HandlePhoneStartupL(void) + ?DialVoiceCallL@CPhoneState@@IAEXXZ @ 123 NONAME ; void CPhoneState::DialVoiceCallL(void) + ?EndUiUpdate@CPhoneState@@IAEXXZ @ 124 NONAME ; void CPhoneState::EndUiUpdate(void) + ?HandleKeyPressDurationL@CPhoneStateIncoming@@UAEXW4TKeyCode@@VTTimeIntervalMicroSeconds@@@Z @ 125 NONAME ; void CPhoneStateIncoming::HandleKeyPressDurationL(enum TKeyCode, class TTimeIntervalMicroSeconds) + ?UpdateInCallCbaL@CPhoneStateInCall@@MAEXXZ @ 126 NONAME ; void CPhoneStateInCall::UpdateInCallCbaL(void) + ?EndTransEffect@CPhoneState@@QAEXXZ @ 127 NONAME ; void CPhoneState::EndTransEffect(void) + ?HandleEnvironmentChangeL@CPhoneState@@UAEXH@Z @ 128 NONAME ; void CPhoneState::HandleEnvironmentChangeL(int) + ?HandleKeyMessageL@CPhoneStateInCall@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 129 NONAME ; void CPhoneStateInCall::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode) + ?SetRingingTonePlaybackL@CPhoneState@@IAEXH@Z @ 130 NONAME ; void CPhoneState::SetRingingTonePlaybackL(int) + ?ProcessCommandL@CPhoneState@@UAEHH@Z @ 131 NONAME ; int CPhoneState::ProcessCommandL(int) + ?BeginUiUpdateLC@CPhoneState@@IAEXXZ @ 132 NONAME ; void CPhoneState::BeginUiUpdateLC(void) + ?DecreaseAudioVolumeL@CPhoneState@@IAEXXZ @ 133 NONAME ; void CPhoneState::DecreaseAudioVolumeL(void) + ?PhoneEngineInfo@CPhoneStateMachine@@UAEPAVMPEEngineInfo@@XZ @ 134 NONAME ; class MPEEngineInfo * CPhoneStateMachine::PhoneEngineInfo(void) + ?CreateNumberEntryL@CPhoneStateInCall@@IAEXXZ @ 135 NONAME ; void CPhoneStateInCall::CreateNumberEntryL(void) + ?HandleSystemEventL@CPhoneUIController@@UAEXABVTWsEvent@@@Z @ 136 NONAME ; void CPhoneUIController::HandleSystemEventL(class TWsEvent const &) + ?DynInitMenuPaneL@CPhoneUIController@@UAEXHPAVCEikMenuPane@@@Z @ 137 NONAME ; void CPhoneUIController::DynInitMenuPaneL(int, class CEikMenuPane *) + ??0CPhoneStateStartup@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 138 NONAME ; CPhoneStateStartup::CPhoneStateStartup(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) + ?GetRemoteInfoDataL@CPhoneState@@IAEXHAAVTDes16@@@Z @ 139 NONAME ; void CPhoneState::GetRemoteInfoDataL(int, class TDes16 &) + ?SetDivertIndication@CPhoneState@@UAEXH@Z @ 140 NONAME ; void CPhoneState::SetDivertIndication(int) + ?UpdateCbaL@CPhoneStateInCall@@MAEXH@Z @ 141 NONAME ; void CPhoneStateInCall::UpdateCbaL(int) + ?SetCallId@CPhoneStateMachine@@UAEXH@Z @ 142 NONAME ; void CPhoneStateMachine::SetCallId(int) + ?ProcessCommandL@CPhoneUIController@@UAEHH@Z @ 143 NONAME ; int CPhoneUIController::ProcessCommandL(int) + ?DisplayHeaderForCallComingInL@CPhoneState@@IAEXHH@Z @ 144 NONAME ; void CPhoneState::DisplayHeaderForCallComingInL(int, int) + ??0CPhoneStateIdle@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 145 NONAME ; CPhoneStateIdle::CPhoneStateIdle(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) + ?SendPhoneEngineMessage@CPhoneStateMachine@@UAEXH@Z @ 146 NONAME ; void CPhoneStateMachine::SendPhoneEngineMessage(int) + ??0CPhoneStateCallSetup@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 147 NONAME ; CPhoneStateCallSetup::CPhoneStateCallSetup(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) + ??0CPhoneState@@QAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 148 NONAME ; CPhoneState::CPhoneState(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) + ?HandleDtmfKeyToneL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 149 NONAME ; void CPhoneState::HandleDtmfKeyToneL(struct TKeyEvent const &, enum TEventCode) + ?HandleKeyMessageL@CPhoneStateIdle@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 150 NONAME ; void CPhoneStateIdle::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode) + ?HandleForegroundEventL@CPhoneUIController@@UAEXH@Z @ 151 NONAME ; void CPhoneUIController::HandleForegroundEventL(int) + ?HandleSendCommandL@CPhoneStateIdle@@MAEXXZ @ 152 NONAME ; void CPhoneStateIdle::HandleSendCommandL(void) + ?HandleCommandL@CPhoneUIController@@UAEHH@Z @ 153 NONAME ; int CPhoneUIController::HandleCommandL(int) + ?HandleCreateNumberEntryL@CPhoneState@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 154 NONAME ; void CPhoneState::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode) + ?DisableHWKeysL@CPhoneState@@QAEXXZ @ 155 NONAME ; void CPhoneState::DisableHWKeysL(void) + ?DisplayHeaderForOutgoingCallL@CPhoneState@@IAEXH@Z @ 156 NONAME ; void CPhoneState::DisplayHeaderForOutgoingCallL(int) + ?GetBlockedKeyList@CPhoneState@@UBEABV?$RArray@H@@XZ @ 157 NONAME ; class RArray const & CPhoneState::GetBlockedKeyList(void) const + ?HandlePhoneEngineMessageL@CPhoneStateInCall@@UAEXHH@Z @ 158 NONAME ; void CPhoneStateInCall::HandlePhoneEngineMessageL(int, int) + ?IsSpeedDialNumber@CPhoneStateIdle@@IBEHABVTDesC16@@@Z @ 159 NONAME ; int CPhoneStateIdle::IsSpeedDialNumber(class TDesC16 const &) const + ?IsNumberEntryUsedL@CPhoneState@@UAEHXZ @ 160 NONAME ; int CPhoneState::IsNumberEntryUsedL(void) + ?PhoneStorage@CPhoneStateMachine@@UAEPAVMPhoneStorage@@XZ @ 161 NONAME ; class MPhoneStorage * CPhoneStateMachine::PhoneStorage(void) + ??1CPhoneState@@UAE@XZ @ 162 NONAME ; CPhoneState::~CPhoneState(void) + ?HandleCreateNumberEntryL@CPhoneStateCallSetup@@MAEXABUTKeyEvent@@W4TEventCode@@@Z @ 163 NONAME ; void CPhoneStateCallSetup::HandleCreateNumberEntryL(struct TKeyEvent const &, enum TEventCode) + ?HandlePhoneEngineMessageL@CPhoneStateCallSetup@@UAEXHH@Z @ 164 NONAME ; void CPhoneStateCallSetup::HandlePhoneEngineMessageL(int, int) + ?HandlePhoneFocusLostEventL@CPhoneState@@UAEXXZ @ 165 NONAME ; void CPhoneState::HandlePhoneFocusLostEventL(void) + ??1CPhoneStateMachine@@UAE@XZ @ 166 NONAME ; CPhoneStateMachine::~CPhoneStateMachine(void) + ?HandleIdleForegroundEventL@CPhoneState@@UAEXXZ @ 167 NONAME ; void CPhoneState::HandleIdleForegroundEventL(void) + ?DynInitMenuPaneL@CPhoneState@@UAEXHPAVCEikMenuPane@@@Z @ 168 NONAME ; void CPhoneState::DynInitMenuPaneL(int, class CEikMenuPane *) + ?IsDTMFEditorVisibleL@CPhoneState@@IBEHXZ @ 169 NONAME ; int CPhoneState::IsDTMFEditorVisibleL(void) const + ?ConstructL@CPhoneStateCallSetup@@MAEXXZ @ 170 NONAME ; void CPhoneStateCallSetup::ConstructL(void) + ?BeginTransEffectLC@CPhoneState@@QAEXW4TStateTransEffectType@@@Z @ 171 NONAME ; void CPhoneState::BeginTransEffectLC(enum TStateTransEffectType) + ?HandleMessage@CPhoneUIController@@UAEXHH@Z @ 172 NONAME ; void CPhoneUIController::HandleMessage(int, int) + ?HandleSystemEventL@CPhoneState@@UAEXABVTWsEvent@@@Z @ 173 NONAME ; void CPhoneState::HandleSystemEventL(class TWsEvent const &) + ?DisplayCallSetupL@CPhoneStateIdle@@IAEXH@Z @ 174 NONAME ; void CPhoneStateIdle::DisplayCallSetupL(int) + ?ConstructL@CPhoneStateStartup@@MAEXXZ @ 175 NONAME ; void CPhoneStateStartup::ConstructL(void) + ?HandleKeyMessageL@CPhoneStateStartup@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 176 NONAME ; void CPhoneStateStartup::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode) + ?ShowNoteL@CPhoneState@@IAEXH@Z @ 177 NONAME ; void CPhoneState::ShowNoteL(int) + ?HandlePropertyChangedL@CPhoneState@@UAEXABVTUid@@IH@Z @ 178 NONAME ; void CPhoneState::HandlePropertyChangedL(class TUid const &, unsigned int, int) + ?IsAnyQueryActiveL@CPhoneState@@QAEHXZ @ 179 NONAME ; int CPhoneState::IsAnyQueryActiveL(void) + ?State@CPhoneStateMachine@@UAEPAVMPhoneState@@XZ @ 180 NONAME ; class MPhoneState * CPhoneStateMachine::State(void) + ?SetHandsfreeModeL@CPhoneState@@IAEXH@Z @ 181 NONAME ; void CPhoneState::SetHandsfreeModeL(int) + ?IsCustomizedDialerVisibleL@CPhoneState@@QBEHXZ @ 182 NONAME ; int CPhoneState::IsCustomizedDialerVisibleL(void) const + ?UpdateInCallCbaL@CPhoneStateCallSetup@@MAEXXZ @ 183 NONAME ; void CPhoneStateCallSetup::UpdateInCallCbaL(void) + ?HandleNumberEntryClearedL@CPhoneStateInCall@@MAEXXZ @ 184 NONAME ; void CPhoneStateInCall::HandleNumberEntryClearedL(void) + ??0CPhoneStateIncoming@@IAE@PAVMPhoneStateMachine@@PAVMPhoneViewCommandHandle@@PAVMPhoneCustomization@@@Z @ 185 NONAME ; CPhoneStateIncoming::CPhoneStateIncoming(class MPhoneStateMachine *, class MPhoneViewCommandHandle *, class MPhoneCustomization *) + ??1CPhoneStateIncoming@@UAE@XZ @ 186 NONAME ; CPhoneStateIncoming::~CPhoneStateIncoming(void) + ?HandleKeyLockEnabled@CPhoneUIController@@UAEXH@Z @ 187 NONAME ; void CPhoneUIController::HandleKeyLockEnabled(int) + ?DisableCallUIL@CPhoneState@@QAEXXZ @ 188 NONAME ; void CPhoneState::DisableCallUIL(void) + ?DeleteTouchPaneButtons@CPhoneState@@IAEXXZ @ 189 NONAME ; void CPhoneState::DeleteTouchPaneButtons(void) + ?ProcessCommandL@CPhoneStateIdle@@UAEHH@Z @ 190 NONAME ; int CPhoneStateIdle::ProcessCommandL(int) + ?IsNoteVisibleL@CPhoneState@@MAEHXZ @ 191 NONAME ; int CPhoneState::IsNoteVisibleL(void) + ?DynInitMenuBarL@CPhoneUIController@@UAEXHPAVCEikMenuBar@@@Z @ 192 NONAME ; void CPhoneUIController::DynInitMenuBarL(int, class CEikMenuBar *) + ?IsAlphanumericSupportedAndCharInput@CPhoneState@@MAEHABUTKeyEvent@@@Z @ 193 NONAME ; int CPhoneState::IsAlphanumericSupportedAndCharInput(struct TKeyEvent const &) + ?HandlePhoneEngineMessageL@CPhoneStateStartup@@UAEXHH@Z @ 194 NONAME ; void CPhoneStateStartup::HandlePhoneEngineMessageL(int, int) + ?HandleKeyEventL@CPhoneStateIncoming@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 195 NONAME ; void CPhoneStateIncoming::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) + ?HandleKeyEventL@CPhoneStateStartup@@UAEXABUTKeyEvent@@W4TEventCode@@@Z @ 196 NONAME ; void CPhoneStateStartup::HandleKeyEventL(struct TKeyEvent const &, enum TEventCode) + ?HandleNumberEntryClearedL@CPhoneState@@MAEXXZ @ 197 NONAME ; void CPhoneState::HandleNumberEntryClearedL(void) + ?OnlyHashInNumberEntryL@CPhoneState@@MAEXXZ @ 198 NONAME ; void CPhoneState::OnlyHashInNumberEntryL(void) + ?IncreaseAudioVolumeL@CPhoneState@@IAEXXZ @ 199 NONAME ; void CPhoneState::IncreaseAudioVolumeL(void) + ?ConstructL@CPhoneStateIdle@@MAEXXZ @ 200 NONAME ; void CPhoneStateIdle::ConstructL(void) + ?CheckIfShowCallTerminationNote@CPhoneState@@MAEHXZ @ 201 NONAME ; int CPhoneState::CheckIfShowCallTerminationNote(void) + ?SetCallHeaderType@CPhoneState@@IAEXW4TPhoneCallTypeFlags@CBubbleManager@@@Z @ 202 NONAME ; void CPhoneState::SetCallHeaderType(enum CBubbleManager::TPhoneCallTypeFlags) + ?SendGlobalInfoNoteL@CPhoneState@@QAEXH@Z @ 203 NONAME ; void CPhoneState::SendGlobalInfoNoteL(int) + ?DisplayIdleScreenL@CPhoneState@@IAEXXZ @ 204 NONAME ; void CPhoneState::DisplayIdleScreenL(void) + ?StartShowSecurityNoteL@CPhoneState@@IAEXXZ @ 205 NONAME ; void CPhoneState::StartShowSecurityNoteL(void) + ?StoreNumberEntryContentL@CPhoneState@@IAEXXZ @ 206 NONAME ; void CPhoneState::StoreNumberEntryContentL(void) + ?SetBTHandsfreeModeL@CPhoneState@@IAEXH@Z @ 207 NONAME ; void CPhoneState::SetBTHandsfreeModeL(int) + ?HandlePhoneEngineMessageL@CPhoneStateIncoming@@UAEXHH@Z @ 208 NONAME ; void CPhoneStateIncoming::HandlePhoneEngineMessageL(int, int) + ?SetDefaultFlagsL@CPhoneState@@IAEXXZ @ 209 NONAME ; void CPhoneState::SetDefaultFlagsL(void) + ?HandleCommandL@CPhoneStateInCall@@UAEHH@Z @ 210 NONAME ; int CPhoneStateInCall::HandleCommandL(int) + ?DialVoiceCallL@CPhoneStateIdle@@IAEXXZ @ 211 NONAME ; void CPhoneStateIdle::DialVoiceCallL(void) + ?UpdateRemoteInfoDataL@CPhoneState@@IAEXH@Z @ 212 NONAME ; void CPhoneState::UpdateRemoteInfoDataL(int) + ?GetRingingCallL@CPhoneStateInCall@@MAEHXZ @ 213 NONAME ; int CPhoneStateInCall::GetRingingCallL(void) + ?HandleIdleForegroundEventL@CPhoneUIController@@UAEXXZ @ 214 NONAME ; void CPhoneUIController::HandleIdleForegroundEventL(void) + ?HandlePhoneForegroundEventL@CPhoneState@@UAEXXZ @ 215 NONAME ; void CPhoneState::HandlePhoneForegroundEventL(void) + ?HandleForegroundEventL@CPhoneState@@UAEXH@Z @ 216 NONAME ; void CPhoneState::HandleForegroundEventL(int) + ?DisplayIncomingCallL@CPhoneStateIdle@@IAEXH@Z @ 217 NONAME ; void CPhoneStateIdle::DisplayIncomingCallL(int) + ?HandleRemConCommandL@CPhoneState@@UAEHW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 218 NONAME ; int CPhoneState::HandleRemConCommandL(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction) + ??1CPhoneStateIdle@@UAE@XZ @ 219 NONAME ; CPhoneStateIdle::~CPhoneStateIdle(void) + ?PhoneNumberFromEntryLC@CPhoneState@@IAEPAVHBufC16@@XZ @ 220 NONAME ; class HBufC16 * CPhoneState::PhoneNumberFromEntryLC(void) + ?BaseConstructL@CPhoneState@@QAEXXZ @ 221 NONAME ; void CPhoneState::BaseConstructL(void) + ?HandlePhoneStartupL@CPhoneUIController@@UAEXXZ @ 222 NONAME ; void CPhoneUIController::HandlePhoneStartupL(void) + ?SpeedDialL@CPhoneStateIdle@@IAEXABIW4TDialInitiationMethod@1@@Z @ 223 NONAME ; void CPhoneStateIdle::SpeedDialL(unsigned int const &, enum CPhoneStateIdle::TDialInitiationMethod) + ?SetTouchPaneButtonEnabled@CPhoneState@@IAEXH@Z @ 224 NONAME ; void CPhoneState::SetTouchPaneButtonEnabled(int) + ?SetPhoneEngine@CPhoneStateMachine@@UAEXPAVMPEPhoneModel@@@Z @ 225 NONAME ; void CPhoneStateMachine::SetPhoneEngine(class MPEPhoneModel *) + ?SpeedDialCanceledL@CPhoneStateIdle@@IAEXABI@Z @ 226 NONAME ; void CPhoneStateIdle::SpeedDialCanceledL(unsigned int const &) + ?CloseDTMFEditorL@CPhoneState@@IAEXXZ @ 227 NONAME ; void CPhoneState::CloseDTMFEditorL(void) + ?SetTouchPaneVisible@CPhoneState@@IAEXH@Z @ 228 NONAME ; void CPhoneState::SetTouchPaneVisible(int) + ?HandlePhoneFocusLostEventL@CPhoneUIController@@UAEXXZ @ 229 NONAME ; void CPhoneUIController::HandlePhoneFocusLostEventL(void) + ?HandleKeyLockEnabled@CPhoneStateIncoming@@UAEXH@Z @ 230 NONAME ; void CPhoneStateIncoming::HandleKeyLockEnabled(int) + ??0CPhoneStateMachine@@IAE@PAVMPhoneViewCommandHandle@@@Z @ 231 NONAME ; CPhoneStateMachine::CPhoneStateMachine(class MPhoneViewCommandHandle *) + ??1CPhoneStateStartup@@UAE@XZ @ 232 NONAME ; CPhoneStateStartup::~CPhoneStateStartup(void) + ?HandleKeyMessageL@CPhoneState@@UAEXW4TPhoneKeyEventMessages@MPhoneKeyEvents@@W4TKeyCode@@@Z @ 233 NONAME ; void CPhoneState::HandleKeyMessageL(enum MPhoneKeyEvents::TPhoneKeyEventMessages, enum TKeyCode) + ?IsDialingExtensionInFocusL@CPhoneState@@QBEHXZ @ 234 NONAME ; int CPhoneState::IsDialingExtensionInFocusL(void) const diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuicontrol/eabi/phoneuicontrolu.def --- a/phoneapp/phoneuicontrol/eabi/phoneuicontrolu.def Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuicontrol/eabi/phoneuicontrolu.def Sun Mar 14 13:09:36 2010 +0000 @@ -468,4 +468,5 @@ _ZThn8_NK11CPhoneState17IsMenuBarVisibleLEv @ 467 NONAME _ZN11CPhoneState17SetToolbarDimmingEi @ 468 NONAME _ZN11CPhoneState34SetToolbarButtonLoudspeakerEnabledEv @ 469 NONAME + _ZNK11CPhoneState26IsDialingExtensionInFocusLEv @ 470 NONAME diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuicontrol/inc/cphoneaccessorybthandler.h --- a/phoneapp/phoneuicontrol/inc/cphoneaccessorybthandler.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuicontrol/inc/cphoneaccessorybthandler.h Sun Mar 14 13:09:36 2010 +0000 @@ -22,9 +22,9 @@ // INCLUDES #include #include -#include -#include -#include +#include "mphoneneclearedhandler.h" +#include "mphonestatemachine.h" +#include "mphoneviewcommandhandle.h" // CLASS DECLARATION diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuicontrol/inc/cphonecbamanager.h --- a/phoneapp/phoneuicontrol/inc/cphonecbamanager.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuicontrol/inc/cphonecbamanager.h Sun Mar 14 13:09:36 2010 +0000 @@ -61,6 +61,9 @@ /** * Set CBA + * If the given CBA resource ID equals EPhoneEasyDialingCba, then get the actual resource + * ID from the Dialer Extension View by executing command EPhoneViewGetEasyDialingCbaId + * via the Phone View Command Handle. */ IMPORT_C void SetCbaL( TInt aResource ); @@ -101,6 +104,12 @@ */ TInt GetIncomingCallSilenceCBA( const TBool aSoftRejectActivated ); + /** + * Get cba resource when number entry is visible + * @return Resource id of CBA + */ + TInt GetNumberEntryCbaIdL(); + private: /** diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuicontrol/inc/cphonestate.h --- a/phoneapp/phoneuicontrol/inc/cphonestate.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuicontrol/inc/cphonestate.h Sun Mar 14 13:09:36 2010 +0000 @@ -369,6 +369,12 @@ IMPORT_C void RetainPreviousKeylockStateL(); + /** + * Check if possible dialer extension is in focus + * @return boolean value indicating if dialer extension is in focus + */ + IMPORT_C TBool IsDialingExtensionInFocusL() const; + public: // NumberEntry functions. /** @@ -424,7 +430,7 @@ /** * Disconnect call */ - IMPORT_C TBool DisconnectCallL(); + IMPORT_C virtual void DisconnectCallL(); /** * Display idle screen @@ -1102,6 +1108,12 @@ * Opens virtual keyboard. */ void OpenVkbL(); + + /** + * Handles commands sent by easydialing plugin. + * @param aCommandId - command id to be handled + */ + void HandleEasyDialingCommandsL( TInt aCommandId ); private: // NumberEntry functions. diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuicontrol/inc/cphonestateidle.h --- a/phoneapp/phoneuicontrol/inc/cphonestateidle.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuicontrol/inc/cphonestateidle.h Sun Mar 14 13:09:36 2010 +0000 @@ -281,6 +281,13 @@ TPhoneCmdParamSpeedDial& aSpeedDialParam ) const; void HandleVoiceCallCommandL( TBool aSendKey ); + + /** + * Returns options menu id when number entry is visible. + * If easydialing is in focus, id is asked from it. + * @return Menu resource id. + */ + TInt GetNumberAcqMenuIdL(); private: diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuicontrol/src/cphonecbamanager.cpp --- a/phoneapp/phoneuicontrol/src/cphonecbamanager.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuicontrol/src/cphonecbamanager.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -139,37 +139,7 @@ } else { - TBool dtmfEditorVisible = iViewCommandHandle.HandleCommandL( - EPhoneViewIsDTMFEditorVisible ) == - EPhoneViewResponseSuccess; - TPhoneCmdParamInteger activeCallCount; - iViewCommandHandle.ExecuteCommandL( - EPhoneViewGetCountOfActiveCalls, &activeCallCount ); - - TPhoneCmdParamCallStateData callStateData; - callStateData.SetCallState( EPEStateRinging ); - iViewCommandHandle.HandleCommandL( - EPhoneViewGetCallIdByState, &callStateData ); - - TInt incomingCall = callStateData.CallId(); - - if( dtmfEditorVisible ) - { - resourceId = EPhoneDtmfDialerCBA; - } - else if( activeCallCount.Integer() == ENoActiveCalls ) - { - resourceId = EPhoneNumberAcqCBA; - } - else if ( activeCallCount.Integer() > ENoActiveCalls && - incomingCall > KErrNotFound ) - { - resourceId = EPhoneCallHandlingCallWaitingCBA; - } - else - { - resourceId = EPhoneInCallNumberAcqCBA; - } + resourceId = GetNumberEntryCbaIdL(); } } @@ -343,9 +313,18 @@ "CPhoneCbaManager::SetCbaL : %d",aResource ); TPhoneCmdParamInteger integerParam; - integerParam.SetInteger( - CPhoneMainResourceResolver::Instance()->ResolveResourceID( - aResource ) ); + + if ( EPhoneEasyDialingCba == aResource ) + { + iViewCommandHandle.ExecuteCommandL( EPhoneViewGetEasyDialingCbaId, &integerParam ); + } + else + { + integerParam.SetInteger( + CPhoneMainResourceResolver::Instance()->ResolveResourceID( + aResource ) ); + } + iViewCommandHandle.ExecuteCommandL( EPhoneViewUpdateCba, &integerParam ); } @@ -487,6 +466,56 @@ return ret; } +// ----------------------------------------------------------- +// CPhoneCbaManager::GetNumberEntryCbaIdL +// ----------------------------------------------------------- +// +TInt CPhoneCbaManager::GetNumberEntryCbaIdL() + { + TInt ret( EPhoneNumberAcqCBA ); + + if ( iState->IsDialingExtensionInFocusL() ) + { + ret = EPhoneEasyDialingCba; + } + else + { + TBool dtmfEditorVisible = iViewCommandHandle.HandleCommandL( + EPhoneViewIsDTMFEditorVisible ) == + EPhoneViewResponseSuccess; + TPhoneCmdParamInteger activeCallCount; + iViewCommandHandle.ExecuteCommandL( + EPhoneViewGetCountOfActiveCalls, &activeCallCount ); + + TPhoneCmdParamCallStateData callStateData; + callStateData.SetCallState( EPEStateRinging ); + iViewCommandHandle.HandleCommandL( + EPhoneViewGetCallIdByState, &callStateData ); + + TInt incomingCall = callStateData.CallId(); + + if( dtmfEditorVisible ) + { + ret = EPhoneDtmfDialerCBA; + } + else if( activeCallCount.Integer() == ENoActiveCalls ) + { + ret = EPhoneNumberAcqCBA; + } + else if ( activeCallCount.Integer() > ENoActiveCalls && + incomingCall > KErrNotFound ) + { + ret = EPhoneCallHandlingCallWaitingCBA; + } + else + { + ret = EPhoneInCallNumberAcqCBA; + } + } + + return ret; + } + // ======== LOCAL FUNCTIONS ======== diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuicontrol/src/cphonestate.cpp --- a/phoneapp/phoneuicontrol/src/cphonestate.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuicontrol/src/cphonestate.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -36,7 +36,7 @@ #include #include #include -#include +#include #include #include #include @@ -105,6 +105,8 @@ #include "cphonecallheadermanager.h" #include "cphonenumberentrymanager.h" #include "mphonestorage.h" +#include "easydialingcommands.hrh" + // ================= MEMBER FUNCTIONS ======================= @@ -459,7 +461,8 @@ CPhoneBtaaDisconnectHandler::InstanceL()->HandleConnectionLostL(); } else if ( audioOutput == EPEBTAudioAccessory && - previousOutput != EPEBTAudioAccessory && + previousOutput > EPENotActive && + previousOutput != EPEBTAudioAccessory && btAvailable ) { CPhoneAccessoryBTHandler* bt = CPhoneAccessoryBTHandler::NewLC( @@ -1059,7 +1062,9 @@ if ( numberEntryUsed && ( aKeyEvent.iRepeats == 0 || aKeyEvent.iScanCode == EStdKeyBackspace || - aKeyEvent.iScanCode ==EStdKeyLeftArrow || + aKeyEvent.iScanCode ==EStdKeyLeftArrow || + aKeyEvent.iScanCode == EStdKeyUpArrow || + aKeyEvent.iScanCode == EStdKeyDownArrow || aKeyEvent.iScanCode ==EStdKeyRightArrow )) { // Number entry exists but may be hidden @@ -1128,6 +1133,18 @@ } // ----------------------------------------------------------- +// CPhoneState::IsDialingExtensionInFocusL +// ----------------------------------------------------------- +// +EXPORT_C TBool CPhoneState::IsDialingExtensionInFocusL() const + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::IsDialingExtensionInFocusL( ) "); + return iViewCommandHandle->HandleCommandL( + EPhoneViewGetEasyDialingInFocusStatus ) == + EPhoneViewResponseSuccess; + } + +// ----------------------------------------------------------- // CPhoneState::SendKeyEventL // ----------------------------------------------------------- // @@ -1437,7 +1454,9 @@ else if ( aCategory == KPSUidStartup && aKey == KStartupSimSecurityStatus ) { // Show security note, SIM is not valid. - if ( aValue == ESimRejected || aValue == ESimUnaccepted ) + if ( aValue == ESimRejected + || aValue == ESimUnaccepted + || aValue == ESimInvalid ) { __PHONELOG( EBasic, EPhoneControl, "CPhoneStateStartup::HandlePropertyChangedL - SimSecurity status received" ); StartShowSecurityNoteL(); @@ -1508,7 +1527,7 @@ //cancel emergency mode. TPhoneCmdParamBoolean booleanParam; booleanParam.SetBoolean( EFalse ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewSetRetrictedDialer,&booleanParam ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetRestrictedDialer, &booleanParam ); } // this should be bypasses? case EPhoneDialerCallHandling: @@ -1645,7 +1664,7 @@ // Set dialer to restricted mode. TPhoneCmdParamBoolean booleanParam; booleanParam.SetBoolean( ETrue ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewSetRetrictedDialer,&booleanParam ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetRestrictedDialer, &booleanParam ); NumberEntryManagerL()->CreateNumberEntryL(); } @@ -1734,16 +1753,28 @@ DisconnectCallL(); break; + case EPhoneCmdUpdateCba: + case EPhoneDialerValidNumber: + case EPhoneDialerInvalidNumber: + case EPhoneCmdBlockingDialogLaunched: + case EPhoneCmdBlockingDialogClosed: + { + // these command ids are sent by easydialing to communicate to phone app + HandleEasyDialingCommandsL( aCommand ); + } + break; + default: if ( IsOnScreenDialerSupported() ) { // Offer command to view. + // Easydialing commands are handled in view, too. TPhoneViewResponseId resId = iViewCommandHandle->HandleCommandL( aCommand ); if( resId == EPhoneViewResponseFailed ) { - commandStatus = EFalse; + commandStatus = EFalse; } } else @@ -1958,7 +1989,7 @@ // CPhoneState::DisconnectCallL // ----------------------------------------------------------- // -EXPORT_C TBool CPhoneState::DisconnectCallL() +EXPORT_C void CPhoneState::DisconnectCallL() { __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::DisconnectCallL( ) "); // Fetch active call's id from view @@ -1999,7 +2030,6 @@ } } - TBool ret = EFalse; if( callStateData.CallId() > KErrNotFound ) { // Release the call @@ -2022,16 +2052,13 @@ iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageRelease ); } - ret = ETrue; } else { __PHONELOG( EOnlyFatal, EPhoneControl, "CPhoneState::DisconnectCallL has negative call id!" ); - } - - return ret; - } + } + } // ----------------------------------------------------------- // CPhoneState::DisplayIdleScreenL @@ -2122,33 +2149,41 @@ } } } - - // Get the number entry contents - HBufC* phoneNumber = PhoneNumberFromEntryLC(); - - // Call the number - iStateMachine->PhoneEngineInfo()->SetPhoneNumber( *phoneNumber ); - - if ( phoneNumber->Des().Length() < KPhoneValidPhoneNumberLength ) + + // If easydialing has focus, call should be initiated to focused contact. + if ( IsDialingExtensionInFocusL() ) { - // Closing effect is shown when dialer exist. - BeginTransEffectLC( ENumberEntryClose ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); - EndTransEffect(); - - HandleNumberEntryClearedL(); + iViewCommandHandle->HandleCommandL( EEasyDialingVoiceCall ); } - - CleanupStack::PopAndDestroy( phoneNumber ); - - if ( !iCustomization || - !iCustomization->HandleCallFromNumberEntryL() ) - { - // Customization didn't handle call. Dial voice call - // as normally - DialVoiceCallL(); + else + { + // Get the number entry contents + HBufC* phoneNumber = PhoneNumberFromEntryLC(); + + // Call the number + iStateMachine->PhoneEngineInfo()->SetPhoneNumber( *phoneNumber ); + + if ( phoneNumber->Des().Length() < KPhoneValidPhoneNumberLength ) + { + // Closing effect is shown when dialer exist. + BeginTransEffectLC( ENumberEntryClose ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); + EndTransEffect(); + + HandleNumberEntryClearedL(); + } + + CleanupStack::PopAndDestroy( phoneNumber ); + + if ( !iCustomization || + !iCustomization->HandleCallFromNumberEntryL() ) + { + // Customization didn't handle call. Dial voice call + // as normally + DialVoiceCallL(); + } } - + } // ----------------------------------------------------------- @@ -2732,7 +2767,7 @@ KCTsyCallType ) ); TInt activeCallId = GetActiveCallIdL(); - if ( activeCallId > KErrNotFound ) + if ( activeCallId > KErrNone ) { if ( iStateMachine->PhoneEngineInfo()->CallALSLine( activeCallId ) == CCCECallParameters::ECCELineTypeAux ) @@ -2780,6 +2815,11 @@ } } } + // TODO: Refactor -> this looks really dubious. + else + { + incallIndicatorParam.SetLittleBubbleVisible( ETrue ); + } // Update the in-call indicator iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateIncallIndicator, @@ -3334,6 +3374,7 @@ { case ESimRejected: case ESimUnaccepted: + case ESimInvalid: retVal = EFalse; break; @@ -3435,21 +3476,38 @@ TInt resourceId ( KErrNone ); - if ( SimSecurityStatus() == ESimRejected ) - { - resourceId = CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneSimRejected ); - } - else if ( SimState() == EPESimNotPresent ) + + switch( SimSecurityStatus() ) { - // insert sim card -note - resourceId = CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneSimRemoved ); - } - else if ( SimSecurityStatus() == ESimUnaccepted ) - { - resourceId = CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneSimUnaccepted ); + case ESimRejected: + { + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneSimRejected ); + break; + } + case ESimUnaccepted: + { + // insert sim card -note + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneSimUnaccepted ); + break; + } + case ESimInvalid: + { + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneSIMInvalidUICC ); + break; + } + default: + { + if ( SimState() == EPESimNotPresent ) + { + // insert sim card -note + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneSimRemoved ); + } + break; + } } if ( resourceId != KErrNone ) @@ -3821,33 +3879,14 @@ &numberEntryCountParam ); TInt neLength( numberEntryCountParam.Integer() ); - if( iCustomization && iCustomization->AllowAlphaNumericMode() ) + if( neLength == 1 ) { - if ( NumberEntryManagerL()->NumberEntryInNumericModeL() ) + TPhoneCmdParamBoolean isSecurityMode; + iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode ); + + if ( !isSecurityMode.Boolean() ) { - if ( neLength == 0 ) - { - OnlyHashInNumberEntryL(); - } - - if ( neLength == 1 ) - { - NumberEntryClearL(); - } - } - NumberEntryManagerL()->NumberEntryToggleAlphaNumericModeL(); - } - else - { - if( neLength == 1 ) - { - TPhoneCmdParamBoolean isSecurityMode; - iViewCommandHandle->ExecuteCommandL( EPhoneViewGetSecurityModeStatus, &isSecurityMode ); - - if ( !isSecurityMode.Boolean() ) - { - OnlyHashInNumberEntryL(); - } + OnlyHashInNumberEntryL(); } } } @@ -4132,6 +4171,8 @@ ESimSecurityStatusUninitialized = KStartupEnumerationFirstValue, ESimRejected, // The PUK code has been entered incorrectly, so the card is rejected. ESimUnaccepted // The SIM lock is on, so the card is unaccepted. + ESimInvalid // The Sim inserted is not same as the one provided by the + // operator, so card is invalid. */ __LOGMETHODSTARTEND(EPhoneControl, "CPhoneState::SimSecurityStatus()" ); return CPhonePubSubProxy::Instance()->Value( @@ -4941,6 +4982,54 @@ } } +// --------------------------------------------------------- +// CPhoneState::HandleEasyDialingCommandsL +// --------------------------------------------------------- +// +void CPhoneState::HandleEasyDialingCommandsL( TInt aCommandId ) + { + switch ( aCommandId ) + { + case EPhoneCmdUpdateCba: + iCbaManager->UpdateInCallCbaL(); + break; + + case EPhoneDialerValidNumber: + { + TPhoneCmdParamBoolean command; + command.SetBoolean( EFalse ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetInvalidCsPhoneNumberFlag, &command ); + } + break; + + case EPhoneDialerInvalidNumber: + { + TPhoneCmdParamBoolean command; + command.SetBoolean( ETrue ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetInvalidCsPhoneNumberFlag, &command ); + } + break; + + case EPhoneCmdBlockingDialogLaunched: + { + TPhoneCmdParamBoolean param; + param.SetBoolean( ETrue ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetBlockingDialogStatus, ¶m ); + } + break; + + case EPhoneCmdBlockingDialogClosed: + { + TPhoneCmdParamBoolean param; + param.SetBoolean( EFalse ); + iViewCommandHandle->ExecuteCommandL( EPhoneViewSetBlockingDialogStatus, ¶m ); + } + break; + + default: + break; + } + } // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuicontrol/src/cphonestateidle.cpp --- a/phoneapp/phoneuicontrol/src/cphonestateidle.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuicontrol/src/cphonestateidle.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -58,6 +58,7 @@ #include "phoneui.pan" #include "phoneconstants.h" #include "mphonecustomization.h" +#include //CONSTANTS const TInt KMaxParamLength = 1024; @@ -307,7 +308,14 @@ case EKeyEnter: if ( IsNumberEntryVisibleL() ) { - HandleCommandL( EPhoneCmdOptions ); + if ( IsDialingExtensionInFocusL() ) + { + HandleCommandL( EEasyDialingEnterKeyAction ); + } + else + { + HandleCommandL( EPhoneCmdOptions ); + } } break; #endif @@ -541,9 +549,8 @@ // Open number entry menubar TPhoneCmdParamInteger integerParam; - integerParam.SetInteger( - CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneNumberAcqMenubar ) ); + TInt menuId( GetNumberAcqMenuIdL() ); + integerParam.SetInteger( menuId ); iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen, &integerParam ); @@ -563,7 +570,13 @@ case EPhoneCmdBack: HandleBackCommandL(); - break; + break; + + case EPhoneViewOpenNumberEntry: + BeginTransEffectLC( ENumberEntryCreate ); + commandStatus = CPhoneState::HandleCommandL( aCommand ); + EndTransEffect(); + break; default: commandStatus = CPhoneState::HandleCommandL( aCommand ); @@ -649,6 +662,7 @@ void CPhoneStateIdle::HandleBackCommandL() { TBool previousApp(EFalse); + // If previous app activation is true then open // previous application. if ( iOnScreenDialer && @@ -658,29 +672,40 @@ iViewCommandHandle->ExecuteCommandL( EPhoneViewGetActivatePreviousApp, &booleanParam ); + if ( booleanParam.Boolean() ) { // Open previous app. iViewCommandHandle->ExecuteCommandL( EPhoneViewActivatePreviousApp ); + BeginTransEffectLC( ENumberEntryClose ); + // Remove number entry from screen iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); + EndTransEffect(); + iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateFSW ); previousApp = ETrue; - } + } } if ( !previousApp ) { + BeginTransEffectLC( ENumberEntryClose ); + // Remove number entry from screen iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); + + EndTransEffect(); + // Do state-specific operation when number entry is cleared HandleNumberEntryClearedL(); - } + } + } // ----------------------------------------------------------- @@ -1148,21 +1173,22 @@ else if ( !TopAppIsDisplayedL() ) { // Phone might not be the topmost app since it has - // some dialog/query open therefore we need to check this - // and remove dialog/phone. - if ( IsAnyQueryActiveL() ) + // some dialog/query open therefore we need to remove dialog/phone. + + if ( !IsSimStateNotPresentWithSecurityModeEnabled() ) { - if ( !IsSimStateNotPresentWithSecurityModeEnabled() ) - { - iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); - } + iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs ); + } + // Remove number entry from screen + iViewCommandHandle->ExecuteCommandL( + EPhoneViewRemoveNumberEntry ); - // Remove number entry from screen - iViewCommandHandle->ExecuteCommandL( - EPhoneViewRemoveNumberEntry ); - } - // Bring Idle app to the foreground + // Bring Idle app to the foreground iViewCommandHandle->ExecuteCommandL( EPhoneViewBringIdleToForeground ); + + // Updates Task list + iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateFSW ); + } } else if ( IsNumberEntryUsedL() ) @@ -1307,32 +1333,31 @@ // ----------------------------------------------------------------------------- // TBool CPhoneStateIdle::CheckAppLaunchingL( const TKeyCode aCode ) - { - TBool valuesFetched( EFalse ); - - if( !IsSimOk() ) - { - return valuesFetched; - } - - TPhoneCmdParamAppInfo appInfo; - HBufC8* appParam = HBufC8::NewL( KMaxParamLength ); - CleanupStack::PushL( appParam ); + { + TBool valuesFetched( EFalse ); + + if( !IsSimOk() ) + { + return valuesFetched; + } + + TPhoneCmdParamAppInfo appInfo; + HBufC8* appParam = HBufC8::NewL( KMaxParamLength ); + CleanupStack::PushL( appParam ); - TPhoneCmdParamInteger numberEntryCount; - iViewCommandHandle->ExecuteCommandL( EPhoneViewGetNumberEntryCount, - &numberEntryCount ); + TBool isValidAppLaunchingKeyEvent = ETrue; - TBool isValidAppLaunchingKeyEvent = EFalse; - if ( iCustomization && iCustomization->AllowAlphaNumericMode() && - TKeyCode( KPhoneDtmfHashCharacter ) == aCode ) + // By-pass checking of number entry length in case of #-character. + // #-character is handled differently from other keys, and number + // entry length has been checked earlier. Checking number entry length + // for #-character is difficult here, because we cannot know if FEP + // has removed the long-# from number entry or not. + if ( TKeyCode( KPhoneDtmfHashCharacter ) != aCode ) { - // If alphanumeric mode is supported FEP changes text input mode with - // long hash and removes hash from number entry. - isValidAppLaunchingKeyEvent = ( numberEntryCount.Integer() == 0 ); - } - else - { + TPhoneCmdParamInteger numberEntryCount; + iViewCommandHandle->ExecuteCommandL( EPhoneViewGetNumberEntryCount, + &numberEntryCount ); + isValidAppLaunchingKeyEvent = ( numberEntryCount.Integer() == 1 ); } @@ -1340,21 +1365,21 @@ { TRAPD( err, CPhoneCenRepProxy::Instance()->FetchValuesFromCenRepL( - appInfo, aCode, appParam, valuesFetched ) ); + appInfo, aCode, appParam, valuesFetched ) ); if ( KErrNone == err && valuesFetched ) { // Remove the number entry window iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNumberEntry ); - // Stop playing DTMF tone - iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF ); + // Stop playing DTMF tone + iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF ); TPhoneCommandParam* phoneCommandParam = static_cast( &appInfo ); - iViewCommandHandle->ExecuteCommandL( - EPhoneViewActivateAppViewConventional, - phoneCommandParam ); + iViewCommandHandle->ExecuteCommandL( + EPhoneViewActivateAppViewConventional, + phoneCommandParam ); // Continue displaying current app but set up the // idle screen in the background @@ -1363,7 +1388,7 @@ } CleanupStack::PopAndDestroy( appParam ); return valuesFetched; - } + } // ----------------------------------------------------------- // CPhoneStateIdle::NumberForSpeedDialLocationL @@ -1422,7 +1447,12 @@ else #endif // _DEBUG { - if ( IsSpeedDialNumber( *phoneNumber ) ) + if ( IsDialingExtensionInFocusL() ) + { + CPhoneState::HandleCommandL( EEasyDialingVoiceCall ); + } + + else if ( IsSpeedDialNumber( *phoneNumber ) ) { // Handle speed dial SpeedDialL( (*phoneNumber)[0], aSendKey ? EDialMethodSendCommand : EDialMethodMenuSelection ); @@ -1439,4 +1469,29 @@ } } +// ----------------------------------------------------------- +// CPhoneStateIdle::HandleVoiceCallCommandL() +// ----------------------------------------------------------- +// +TInt CPhoneStateIdle::GetNumberAcqMenuIdL() + { + TInt menuId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneNumberAcqMenubar ); + + // Use easy dialing menu id, if easydialing is in focus. + // Otherwise use number acquisition menu id. + if ( IsDialingExtensionInFocusL() ) + { + // Fetch easydialing menu id, check its validity and assign to menuId + TPhoneCmdParamInteger integerParam; + iViewCommandHandle->ExecuteCommandL( + EPhoneViewGetEasyDialingMenuId, &integerParam ); + if ( integerParam.Integer() ) + { + menuId = integerParam.Integer(); + } + } + return menuId; + } + // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuicontrol/src/cphonestateincall.cpp --- a/phoneapp/phoneuicontrol/src/cphonestateincall.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuicontrol/src/cphonestateincall.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -51,6 +51,8 @@ #include "cphonemediatorsender.h" #include "cphoneterminateallconnectionscommand.h" #include "mphonecustomization.h" +#include "easydialingcommands.hrh" + // ================= MEMBER FUNCTIONS ======================= @@ -146,7 +148,15 @@ } else if ( IsNumberEntryVisibleL() ) { - HandleCommandL( EPhoneCmdOptions ); + if ( IsDialingExtensionInFocusL() ) + { + iViewCommandHandle->HandleCommandL( + EEasyDialingEnterKeyAction ); + } + else + { + HandleCommandL( EPhoneCmdOptions ); + } } break; #endif @@ -762,7 +772,7 @@ case EPhoneCmdEnd: CloseDtmfQueryL(); - CPhoneState::DisconnectCallL(); + DisconnectCallL(); break; // 'End all calls' from menu diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuicontrol/src/cphoneuicontroller.cpp --- a/phoneapp/phoneuicontrol/src/cphoneuicontroller.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuicontrol/src/cphoneuicontroller.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -35,6 +35,7 @@ #include "cphonecenrepproxy.h" #include "cphonemediatorfactory.h" #include "tphonecmdparamnumberentryobserver.h" +#include // ================= MEMBER FUNCTIONS ======================= @@ -323,9 +324,17 @@ { __ASSERT_DEBUG( iStateMachine->State(), Panic( EPhoneCtrlInvariant ) ); + // Send key up message to engine so that we wouldn't accidentally play // any DTMF tone. - iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF ); + + // DTMF tone is not ended if command is EPhoneDialerValidNumber or + // EPhoneDialerInvalidNumber. These commands result from + // user pressing numbers, and they must not interfere with tones. + if ( ! ( aCommand == EPhoneDialerValidNumber || aCommand == EPhoneDialerInvalidNumber ) ) + { + iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF ); + } return iStateMachine->State()->HandleCommandL( aCommand ); } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/bwins/phoneuistatesu.def --- a/phoneapp/phoneuistates/bwins/phoneuistatesu.def Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/bwins/phoneuistatesu.def Sun Mar 14 13:09:36 2010 +0000 @@ -62,4 +62,6 @@ ?SetDivertIndication@CPhoneGsmInCall@@MAEXH@Z @ 61 NONAME ; void CPhoneGsmInCall::SetDivertIndication(int) ?HandleErrorL@CPhoneIncoming@@UAEXABUTPEErrorInfo@@@Z @ 62 NONAME ; void CPhoneIncoming::HandleErrorL(struct TPEErrorInfo const &) ?HandleRemConCommandL@CPhoneEmergency@@MAEHW4TRemConCoreApiOperationId@@W4TRemConCoreApiButtonAction@@@Z @ 63 NONAME ; int CPhoneEmergency::HandleRemConCommandL(enum TRemConCoreApiOperationId, enum TRemConCoreApiButtonAction) + ?HandleErrorL@CPhoneConferenceAndSingleAndWaiting@@UAEXABUTPEErrorInfo@@@Z @ 64 NONAME ; void CPhoneConferenceAndSingleAndWaiting::HandleErrorL(struct TPEErrorInfo const &) + ?HandleErrorL@CPhoneConferenceAndWaiting@@UAEXABUTPEErrorInfo@@@Z @ 65 NONAME ; void CPhoneConferenceAndWaiting::HandleErrorL(struct TPEErrorInfo const &) diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/eabi/phoneuistatesu.def --- a/phoneapp/phoneuistates/eabi/phoneuistatesu.def Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/eabi/phoneuistatesu.def Sun Mar 14 13:09:36 2010 +0000 @@ -255,4 +255,8 @@ _ZThn8_N16CPhoneTwoSingles17HandleKeyMessageLEN15MPhoneKeyEvents22TPhoneKeyEventMessagesE8TKeyCode @ 254 NONAME _ZThn8_N16CPhoneTwoSinglesD0Ev @ 255 NONAME _ZThn8_N16CPhoneTwoSinglesD1Ev @ 256 NONAME + _ZN26CPhoneConferenceAndWaiting12HandleErrorLERK12TPEErrorInfo @ 257 NONAME + _ZN35CPhoneConferenceAndSingleAndWaiting12HandleErrorLERK12TPEErrorInfo @ 258 NONAME + _ZThn4_N26CPhoneConferenceAndWaiting12HandleErrorLERK12TPEErrorInfo @ 259 NONAME + _ZThn4_N35CPhoneConferenceAndSingleAndWaiting12HandleErrorLERK12TPEErrorInfo @ 260 NONAME diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/inc/cphoneconference.h --- a/phoneapp/phoneuistates/inc/cphoneconference.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/inc/cphoneconference.h Sun Mar 14 13:09:36 2010 +0000 @@ -121,6 +121,7 @@ void UpdateConferenceSecurityStatusL( TInt aCallId ); + virtual void DisconnectCallL(); private: diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/inc/cphoneconferenceandsingle.h --- a/phoneapp/phoneuistates/inc/cphoneconferenceandsingle.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/inc/cphoneconferenceandsingle.h Sun Mar 14 13:09:36 2010 +0000 @@ -90,6 +90,7 @@ virtual void HandleConferenceIdleL(); + virtual void DisconnectCallL(); private: diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/inc/cphoneconferenceandsingleandwaiting.h --- a/phoneapp/phoneuistates/inc/cphoneconferenceandsingleandwaiting.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/inc/cphoneconferenceandsingleandwaiting.h Sun Mar 14 13:09:36 2010 +0000 @@ -66,6 +66,14 @@ const TKeyEvent& aKeyEvent, TEventCode aEventCode ); + /** + * HandleError + * Implements error handling framework + * @param aErrorInfo: the error info + */ + IMPORT_C virtual void HandleErrorL( + const TPEErrorInfo& aErrorInfo ); + protected: /** diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/inc/cphoneconferenceandwaiting.h --- a/phoneapp/phoneuistates/inc/cphoneconferenceandwaiting.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/inc/cphoneconferenceandwaiting.h Sun Mar 14 13:09:36 2010 +0000 @@ -66,6 +66,14 @@ const TKeyEvent& aKeyEvent, TEventCode aEventCode ); + /** + * HandleError + * Implements error handling framework + * @param aErrorInfo: the error info + */ + IMPORT_C virtual void HandleErrorL( + const TPEErrorInfo& aErrorInfo ); + protected: /** diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphonealerting.cpp --- a/phoneapp/phoneuistates/src/cphonealerting.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphonealerting.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -226,12 +226,7 @@ } } break; - case MEngineMonitor::EPEMessageColpNumberAvailable: - { - HandleColpNoteL( aCallId ); - return; - } - break; + default: break; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphoneconference.cpp --- a/phoneapp/phoneuistates/src/cphoneconference.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphoneconference.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -924,6 +924,12 @@ "CPhoneConference::HandleIncomingL()"); BeginUiUpdateLC(); + + // Hide the number entry if it exists + if ( IsNumberEntryUsedL() ) + { + SetNumberEntryVisibilityL( EFalse ); + } TPhoneCmdParamBoolean dialerParam; dialerParam.SetBoolean( ETrue ); @@ -1126,4 +1132,35 @@ } } +// ----------------------------------------------------------- +// CPhoneConference::DisconnectCallL +// ----------------------------------------------------------- +// +void CPhoneConference::DisconnectCallL() + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConference::DisconnectCallL( ) "); + // Fetch active call's id from view + TPhoneCmdParamCallStateData callStateData; + callStateData.SetCallState( EPEStateConnected ); + iViewCommandHandle->HandleCommandL( + EPhoneViewGetCallIdByState, &callStateData ); + + if( callStateData.CallId() == KErrNotFound ) + { + // No connected call, find the hold call + callStateData.SetCallState( EPEStateHeld ); + iViewCommandHandle->HandleCommandL( + EPhoneViewGetCallIdByState, &callStateData ); + } + + if( callStateData.CallId() > KErrNotFound ) + { + iStateMachine->SendPhoneEngineMessage( + CPEPhoneModelIF::EPEMessageHangUpConference ); + } + else + { + CPhoneState::DisconnectCallL(); + } + } // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphoneconferenceandcallsetup.cpp --- a/phoneapp/phoneuistates/src/cphoneconferenceandcallsetup.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphoneconferenceandcallsetup.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -52,13 +52,15 @@ // CPhoneConferenceAndCallSetup::~CPhoneConferenceAndCallSetup() { - // Reset flag + // Need to check iViewCommandHandle validity here to not + // trigger a high/can panic error in a Codescanner run. + // coverity[var_compare_op] if ( iViewCommandHandle ) { TPhoneCmdParamBoolean dtmfSendFlag; dtmfSendFlag.SetBoolean( EFalse ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, - &dtmfSendFlag ); + TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, + &dtmfSendFlag ) ); } } @@ -131,12 +133,6 @@ } break; - case MEngineMonitor::EPEMessageColpNumberAvailable: - { - HandleColpNoteL( aCallId ); - } - break; - default: { CPhoneConference::HandlePhoneEngineMessageL( aMessage, diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphoneconferenceandsingle.cpp --- a/phoneapp/phoneuistates/src/cphoneconferenceandsingle.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphoneconferenceandsingle.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -57,13 +57,15 @@ // CPhoneConferenceAndSingle::~CPhoneConferenceAndSingle() { - // Reset flag + // Need to check iViewCommandHandle validity here to not + // trigger a high/can panic error in a Codescanner run. + // coverity[var_compare_op] if ( iViewCommandHandle ) { TPhoneCmdParamBoolean dtmfSendFlag; dtmfSendFlag.SetBoolean( EFalse ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, - &dtmfSendFlag ); + TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, + &dtmfSendFlag ) ); } } @@ -461,6 +463,12 @@ BeginUiUpdateLC(); + // Hide the number entry if it exists + if ( IsNumberEntryUsedL() ) + { + SetNumberEntryVisibilityL( EFalse ); + } + TPhoneCmdParamBoolean dialerParam; dialerParam.SetBoolean( ETrue ); @@ -653,4 +661,28 @@ CleanupStack::PopAndDestroy( phoneNumber ); } +// ----------------------------------------------------------- +// CPhoneConferenceAndSingle::DisconnectCallL +// ----------------------------------------------------------- +// +void CPhoneConferenceAndSingle::DisconnectCallL() + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneConferenceAndSingle::DisconnectCallL( ) "); + // Fetch active call's id from view + TPhoneCmdParamCallStateData callStateData; + callStateData.SetCallState( EPEStateConnected ); + iViewCommandHandle->HandleCommandL( + EPhoneViewGetCallIdByState, &callStateData ); + + if( callStateData.CallId() > KErrNotFound && callStateData.CallId() == KConferenceCallId ) + { + iStateMachine->SendPhoneEngineMessage( + CPEPhoneModelIF::EPEMessageHangUpConference ); + } + else + { + CPhoneState::DisconnectCallL(); + } + } + // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphoneconferenceandsingleandwaiting.cpp --- a/phoneapp/phoneuistates/src/cphoneconferenceandsingleandwaiting.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphoneconferenceandsingleandwaiting.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -34,7 +34,7 @@ #include "phoneui.hrh" #include "mphonestorage.h" #include "cphonecenrepproxy.h" -#include +#include // ================= MEMBER FUNCTIONS ======================= @@ -57,13 +57,15 @@ // CPhoneConferenceAndSingleAndWaiting::~CPhoneConferenceAndSingleAndWaiting() { - // Reset flag + // Need to check iViewCommandHandle validity here to not + // trigger a high/can panic error in a Codescanner run. + // coverity[var_compare_op] if ( iViewCommandHandle ) { TPhoneCmdParamBoolean dtmfSendFlag; dtmfSendFlag.SetBoolean( EFalse ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, - &dtmfSendFlag ); + TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, + &dtmfSendFlag ) ); } } @@ -437,6 +439,28 @@ } // ----------------------------------------------------------- +// CPhoneConferenceAndSingleAndWaiting::HandleErrorL +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneConferenceAndSingleAndWaiting::HandleErrorL( + const TPEErrorInfo& aErrorInfo ) + { + __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndSingleAndWaiting::HandleErrorL()"); + + if( aErrorInfo.iErrorCode == ECCPErrorCCUserAlertingNoAnswer ) + { + // Should not shown "No Answer" note + __PHONELOG1( EBasic, EPhoneUIStates, + "PhoneUIStates: CPhoneConferenceAndSingleAndWaiting::HandleErrorL - aErrorInfo.iErrorCode =%d ", + aErrorInfo.iErrorCode); + } + else + { + CPhoneState::HandleErrorL( aErrorInfo ); + } + } + +// ----------------------------------------------------------- // CPhoneConferenceAndSingleAndWaiting::UpdateInCallCbaL // ----------------------------------------------------------- // diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphoneconferenceandwaiting.cpp --- a/phoneapp/phoneuistates/src/cphoneconferenceandwaiting.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphoneconferenceandwaiting.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include "cphoneconferenceandwaiting.h" #include "mphonestatemachine.h" #include "phoneviewcommanddefinitions.h" @@ -187,6 +187,28 @@ } // ----------------------------------------------------------- +// CPhoneConferenceAndWaiting::HandleErrorL +// ----------------------------------------------------------- +// +EXPORT_C void CPhoneConferenceAndWaiting::HandleErrorL( + const TPEErrorInfo& aErrorInfo ) + { + __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneConferenceAndWaiting::HandleErrorL()"); + + if( aErrorInfo.iErrorCode == ECCPErrorCCUserAlertingNoAnswer ) + { + // Should not shown "No Answer" note + __PHONELOG1( EBasic, EPhoneUIStates, + "PhoneUIStates: CPhoneConferenceAndWaiting::HandleErrorL - aErrorInfo.iErrorCode =%d ", + aErrorInfo.iErrorCode); + } + else + { + CPhoneState::HandleErrorL( aErrorInfo ); + } + } + +// ----------------------------------------------------------- // CPhoneConferenceAndWaiting::OpenMenuBarL // ----------------------------------------------------------- // diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphoneconferenceandwaitingandcallsetup.cpp --- a/phoneapp/phoneuistates/src/cphoneconferenceandwaitingandcallsetup.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphoneconferenceandwaitingandcallsetup.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -54,13 +54,15 @@ // CPhoneConferenceAndWaitingAndCallSetup::~CPhoneConferenceAndWaitingAndCallSetup() { - // Reset flag + // Need to check iViewCommandHandle validity here to not + // trigger a high/can panic error in a Codescanner run. + // coverity[var_compare_op] if ( iViewCommandHandle ) { TPhoneCmdParamBoolean dtmfSendFlag; dtmfSendFlag.SetBoolean( EFalse ); - iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, - &dtmfSendFlag ); + TRAP_IGNORE( iViewCommandHandle->ExecuteCommandL( EPhoneViewSetDtmfOptionsFlag, + &dtmfSendFlag ) ); } } @@ -135,12 +137,6 @@ HandleIdleL( aCallId ); } break; - - case MEngineMonitor::EPEMessageColpNumberAvailable: - { - HandleColpNoteL( aCallId ); - } - break; default: { diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphoneemergency.cpp --- a/phoneapp/phoneuistates/src/cphoneemergency.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphoneemergency.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -182,6 +182,13 @@ } } break; + + case MEngineMonitor::EPEMessageColpNumberAvailable: + { + //Don't show COLP note during emergency call. + return; + } + break; default: CPhoneGsmInCall::HandlePhoneEngineMessageL( diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphonegsmincall.cpp --- a/phoneapp/phoneuistates/src/cphonegsmincall.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphonegsmincall.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -142,6 +142,12 @@ UpdateCbaL( EPhoneCallHandlingInCallCBA ); } break; + + case MEngineMonitor::EPEMessageColpNumberAvailable: + { + HandleColpNoteL( aCallId ); + } + break; default: CPhoneStateInCall::HandlePhoneEngineMessageL( diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphoneincoming.cpp --- a/phoneapp/phoneuistates/src/cphoneincoming.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphoneincoming.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -194,6 +194,12 @@ BeginUiUpdateLC(); + // Hide the number entry if it exists + if ( IsNumberEntryUsedL() ) + { + SetNumberEntryVisibilityL( EFalse ); + } + TPhoneCmdParamBoolean dialerParam; dialerParam.SetBoolean( ETrue ); diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphonesingleandalerting.cpp --- a/phoneapp/phoneuistates/src/cphonesingleandalerting.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphonesingleandalerting.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -111,13 +111,7 @@ HandleIdleL( aCallId ); } break; - - case MEngineMonitor::EPEMessageColpNumberAvailable: - { - HandleColpNoteL( aCallId ); - } - break; - + default: { CPhoneAlerting::HandlePhoneEngineMessageL( aMessage, aCallId ); diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphonesingleandcallsetupandwaiting.cpp --- a/phoneapp/phoneuistates/src/cphonesingleandcallsetupandwaiting.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphonesingleandcallsetupandwaiting.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -221,12 +221,7 @@ // Flow through to default branch. CaptureKeysDuringCallNotificationL( EFalse ); } - - case MEngineMonitor::EPEMessageColpNumberAvailable: - { - HandleColpNoteL( aCallId ); - } - break; + default: { CPhoneGsmInCall::HandlePhoneEngineMessageL( aMessage, aCallId ); diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphonesinglecall.cpp --- a/phoneapp/phoneuistates/src/cphonesinglecall.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphonesinglecall.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include "cphonesinglecall.h" #include "tphonecmdparamstring.h" @@ -499,6 +499,12 @@ BeginUiUpdateLC(); + // Hide the number entry if it exists + if ( IsNumberEntryUsedL() ) + { + SetNumberEntryVisibilityL( EFalse ); + } + TPhoneCmdParamBoolean dialerParam; dialerParam.SetBoolean( ETrue ); diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphonetwosingles.cpp --- a/phoneapp/phoneuistates/src/cphonetwosingles.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphonetwosingles.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -399,6 +399,12 @@ BeginUiUpdateLC(); + // Hide the number entry if it exists + if ( IsNumberEntryUsedL() ) + { + SetNumberEntryVisibilityL( EFalse ); + } + TPhoneCmdParamBoolean dialerParam; dialerParam.SetBoolean( ETrue ); diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuistates/src/cphonetwosinglesandwaiting.cpp --- a/phoneapp/phoneuistates/src/cphonetwosinglesandwaiting.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuistates/src/cphonetwosinglesandwaiting.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include "cphonetwosinglesandwaiting.h" #include "tphonecmdparamboolean.h" #include "mphonestatemachine.h" diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiutils/inc/phoneloggerviewcommands.h --- a/phoneapp/phoneuiutils/inc/phoneloggerviewcommands.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiutils/inc/phoneloggerviewcommands.h Sun Mar 14 13:09:36 2010 +0000 @@ -293,8 +293,8 @@ EPhoneViewIsStraightCallToVideoMailBox, /** EPhoneViewSetDtmfDialerViewVisible */ EPhoneViewSetDtmfDialerViewVisible, - /** EPhoneViewSetRetrictedDialer */ - EPhoneViewSetRetrictedDialer, + /** EPhoneViewSetRestrictedDialer */ + EPhoneViewSetRestrictedDialer, /** EPhoneViewIsConferenceInExpandedMode */ EPhoneViewIsConferenceInExpandedMode, /** EPhoneViewIsMenuBarVisible */ @@ -415,6 +415,24 @@ EPhoneViewSetNoConnectedCalls, /** EPhoneViewIsDTMFEditorVisible */ EPhoneViewIsDTMFEditorVisible, + /** EPhoneViewSetToolbarDimming */ + EPhoneViewSetToolbarDimming, + /** EPhoneViewEnableToolbarButton */ + EPhoneViewEnableToolbarButton, + /** EPhoneViewHideToolbar */ + EPhoneViewHideToolbar, + /** EPhoneViewShowToolbar */ + EPhoneViewShowToolbar, + /** EPhoneViewGetEasyDialingInFocusStatus */ + EPhoneViewGetEasyDialingInFocusStatus, + /** EPhoneViewSetInvalidCsPhoneNumberFlag */ + EPhoneViewSetInvalidCsPhoneNumberFlag, + /** EPhoneViewGetInvalidCsPhoneNumberFlag */ + EPhoneViewGetInvalidCsPhoneNumberFlag, + /** EPhoneViewGetEasyDialingMenuId */ + EPhoneViewGetEasyDialingMenuId, + /** EPhoneViewGetEasyDialingCbaId */ + EPhoneViewGetEasyDialingCbaId, /** , // Don't remove this, this should always be the last in list. */ EPhoneAmountOfCommands }; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiutils/inc/phonerssbase.h --- a/phoneapp/phoneuiutils/inc/phonerssbase.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiutils/inc/phonerssbase.h Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* 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" @@ -359,6 +359,7 @@ EPhoneNoteTTYNoAudioControl, //300 EPhoneInfoClirChange, EPhoneInfoCugInUse, + EPhoneSIMInvalidUICC, //the "DTMF number" list query EPhoneDtmfNumberListQuery, @@ -389,6 +390,8 @@ EPhoneNoteUnableToMakeVideoCallNotSupportedByOtherPhone, // cause 57,88 EPhoneNoteCalledNumberHasBarredIncomingCalls, // cause 21 + EPhoneEasyDialingCba, // the CBA resource id is asked from Easydialing plugin + // Last EPhoneRssBaseLast }; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiutils/src/cphonepubsubproxy.cpp --- a/phoneapp/phoneuiutils/src/cphonepubsubproxy.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiutils/src/cphonepubsubproxy.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -301,22 +301,6 @@ // Remove observer observerRemoved = ETrue; iObserverArray->Delete( i ); - - // Remove this observers' subscriptions - TInt pubSubCount = iPublishSubscriberArray->Count(); - - for ( TInt j = pubSubCount - 1; j >= 0; j++ ) - { - CPhonePublishSubscriberAO* publishSubscriber = - iPublishSubscriberArray->At( j ); - - if ( publishSubscriber->Category() == observerTag.iCategory && - publishSubscriber->Key() == observerTag.iKey ) - { - iPublishSubscriberArray->Delete( i ); - delete publishSubscriber; - } - } } } } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiutils/src/cphoneresourceresolverbase.cpp --- a/phoneapp/phoneuiutils/src/cphoneresourceresolverbase.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiutils/src/cphoneresourceresolverbase.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* 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" @@ -1113,7 +1113,7 @@ break; case EPhoneInformationWaitNote: - retVal = R_PHONE_INFORMATION_NOTE_WITH_WAIT; + retVal = R_PHONE_INFORMATION_NOTE_WITH_CBA; break; case EPhoneInformationErrorNote: @@ -1307,6 +1307,9 @@ retVal = R_PHONEUI_SIM_REMOVED; break; + case EPhoneSIMInvalidUICC: + retVal = R_SIM_INVALID_UICC; + break; case EPhoneRebootRequired: retVal = R_PHONEUI_REBOOT_REQUIRED; break; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiutils/src/phoneloggerviewcommands.cpp --- a/phoneapp/phoneuiutils/src/phoneloggerviewcommands.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiutils/src/phoneloggerviewcommands.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -156,7 +156,7 @@ _STLIT8(K129, "EPhoneViewGetIsConferenceInSelectionMode"); _STLIT8(K130, "EPhoneViewIsStraightCallToVideoMailBox"); _STLIT8(K131, "EPhoneViewSetDtmfDialerViewVisible"); -_STLIT8(K132, "EPhoneViewSetRetrictedDialer"); +_STLIT8(K132, "EPhoneViewSetRestrictedDialer"); _STLIT8(K133, "EPhoneViewIsConferenceInExpandedMode"); _STLIT8(K134, "EPhoneViewIsMenuBarVisible"); _STLIT8(K135, "EPhoneViewGetBlockingDialogStatus"); @@ -217,7 +217,16 @@ _STLIT8(K190, "EPhoneViewIsActiveNoteDissmissableByKeyEvent"); _STLIT8(K191, "EPhoneViewSetNoConnectedCalls"); _STLIT8(K192, "EPhoneViewIsDTMFEditorVisible"); -_STLIT8(K193, ", // Don't remove this, this should always be the last in list."); +_STLIT8(K193, "EPhoneViewSetToolbarDimming"); +_STLIT8(K194, "EPhoneViewEnableToolbarButton"); +_STLIT8(K195, "EPhoneViewHideToolbar"); +_STLIT8(K196, "EPhoneViewShowToolbar"); +_STLIT8(K197, "EPhoneViewGetEasyDialingInFocusStatus"); +_STLIT8(K198, "EPhoneViewSetInvalidCsPhoneNumberFlag"); +_STLIT8(K199, "EPhoneViewGetInvalidCsPhoneNumberFlag"); +_STLIT8(K200, "EPhoneViewGetEasyDialingMenuId"); +_STLIT8(K201, "EPhoneViewGetEasyDialingCbaId"); +_STLIT8(K202, ", // Don't remove this, this should always be the last in list."); // Intermediate const void * const KStringPointers[] = @@ -414,8 +423,17 @@ (const void*)&K190, (const void*)&K191, (const void*)&K192, - (const void*)&K193 + (const void*)&K193, + (const void*)&K194, + (const void*)&K195, + (const void*)&K196, + (const void*)&K197, + (const void*)&K198, + (const void*)&K199, + (const void*)&K200, + (const void*)&K201, + (const void*)&K202 }; -const TStringTable PhoneLoggerviewCommands::Table = {193, KStringPointers, EFalse}; +const TStringTable PhoneLoggerviewCommands::Table = {202, KStringPointers, EFalse}; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiutils/src/phoneloggerviewcommands.st --- a/phoneapp/phoneuiutils/src/phoneloggerviewcommands.st Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiutils/src/phoneloggerviewcommands.st Sun Mar 14 13:09:36 2010 +0000 @@ -131,7 +131,7 @@ EPhoneViewGetIsConferenceInSelectionMode EPhoneViewGetIsConferenceInSelectionMode EPhoneViewIsStraightCallToVideoMailBox EPhoneViewIsStraightCallToVideoMailBox EPhoneViewSetDtmfDialerViewVisible EPhoneViewSetDtmfDialerViewVisible -EPhoneViewSetRetrictedDialer EPhoneViewSetRetrictedDialer +EPhoneViewSetRestrictedDialer EPhoneViewSetRestrictedDialer EPhoneViewIsConferenceInExpandedMode EPhoneViewIsConferenceInExpandedMode EPhoneViewIsMenuBarVisible EPhoneViewIsMenuBarVisible EPhoneViewGetBlockingDialogStatus EPhoneViewGetBlockingDialogStatus @@ -192,4 +192,13 @@ EPhoneViewIsActiveNoteDissmissableByKeyEvent EPhoneViewIsActiveNoteDissmissableByKeyEvent EPhoneViewSetNoConnectedCalls EPhoneViewSetNoConnectedCalls EPhoneViewIsDTMFEditorVisible EPhoneViewIsDTMFEditorVisible +EPhoneViewSetToolbarDimming EPhoneViewSetToolbarDimming +EPhoneViewEnableToolbarButton EPhoneViewEnableToolbarButton +EPhoneViewHideToolbar EPhoneViewHideToolbar +EPhoneViewShowToolbar EPhoneViewShowToolbar +EPhoneViewGetEasyDialingInFocusStatus EPhoneViewGetEasyDialingInFocusStatus +EPhoneViewSetInvalidCsPhoneNumberFlag EPhoneViewSetInvalidCsPhoneNumberFlag +EPhoneViewGetInvalidCsPhoneNumberFlag EPhoneViewGetInvalidCsPhoneNumberFlag +EPhoneViewGetEasyDialingMenuId EPhoneViewGetEasyDialingMenuId +EPhoneViewGetEasyDialingCbaId EPhoneViewGetEasyDialingCbaId EPhoneAmountOfCommands, // Don't remove this, this should always be the last in list. diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/bwins/phoneuiviewu.def --- a/phoneapp/phoneuiview/bwins/phoneuiviewu.def Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/bwins/phoneuiviewu.def Sun Mar 14 13:09:36 2010 +0000 @@ -24,4 +24,16 @@ ?ExecuteCommandL@CPhoneViewController@@UAEXHPAVTPhoneCommandParam@@@Z @ 23 NONAME ; void CPhoneViewController::ExecuteCommandL(int, class TPhoneCommandParam *) ?FetchContent@CPhoneViewController@@UAEABVTDesC16@@XZ @ 24 NONAME ; class TDesC16 const & CPhoneViewController::FetchContent(void) ?HandleCommandL@CPhoneViewController@@UAEHH@Z @ 25 NONAME ; int CPhoneViewController::HandleCommandL(int) + ?ButtonState@CPhoneDialerController@@UBEHW4TButtonIndex@MPhoneDialerController@@@Z @ 26 NONAME ; int CPhoneDialerController::ButtonState(enum MPhoneDialerController::TButtonIndex) const + ?ConstructL@CPhoneDialerController@@IAEXXZ @ 27 NONAME ; void CPhoneDialerController::ConstructL(void) + ??0CPhoneDialerController@@IAE@PAVCPhoneBubbleWrapper@@AAVCCoeEnv@@@Z @ 28 NONAME ; CPhoneDialerController::CPhoneDialerController(class CPhoneBubbleWrapper *, class CCoeEnv &) + ?SetNumberEntryIsEmpty@CPhoneDialerController@@UAEXH@Z @ 29 NONAME ; void CPhoneDialerController::SetNumberEntryIsEmpty(int) + ?EasyDialingAllowed@CPhoneDialerController@@UBEHXZ @ 30 NONAME ; int CPhoneDialerController::EasyDialingAllowed(void) const + ?EmergencyCallActive@CPhoneDialerController@@IBEHXZ @ 31 NONAME ; int CPhoneDialerController::EmergencyCallActive(void) const + ??1CPhoneDialerController@@UAE@XZ @ 32 NONAME ; CPhoneDialerController::~CPhoneDialerController(void) + ?CbaResourceId@CPhoneDialerController@@UBEHXZ @ 33 NONAME ; int CPhoneDialerController::CbaResourceId(void) const + ?NumberEntryPromptTextL@CPhoneDialerController@@UAEABVTDesC16@@XZ @ 34 NONAME ; class TDesC16 const & CPhoneDialerController::NumberEntryPromptTextL(void) + ?MenuResourceId@CPhoneDialerController@@UBEHXZ @ 35 NONAME ; int CPhoneDialerController::MenuResourceId(void) const + ?ButtonDimmed@CPhoneDialerController@@UBEHW4TButtonIndex@MPhoneDialerController@@@Z @ 36 NONAME ; int CPhoneDialerController::ButtonDimmed(enum MPhoneDialerController::TButtonIndex) const + ?GetButtonData@CPhoneDialerController@@UBEHW4TButtonIndex@MPhoneDialerController@@AAV?$RPointerArray@VCButtonData@MPhoneDialerController@@@@@Z @ 37 NONAME ; int CPhoneDialerController::GetButtonData(enum MPhoneDialerController::TButtonIndex, class RPointerArray &) const diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/eabi/phoneuiviewu.def --- a/phoneapp/phoneuiview/eabi/phoneuiviewu.def Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/eabi/phoneuiviewu.def Sun Mar 14 13:09:36 2010 +0000 @@ -104,4 +104,29 @@ _ZThn4_N20CPhoneViewController15ExecuteCommandLEii @ 103 NONAME _ZThn4_N20CPhoneViewController15ExecuteCommandLEiiP18TPhoneCommandParam @ 104 NONAME _ZThn4_N20CPhoneViewController15ExecuteCommandLEiiR7TDesC16 @ 105 NONAME + _ZTI22CPhoneDialerController @ 106 NONAME + _ZTV22CPhoneDialerController @ 107 NONAME + _ZN22CPhoneDialerController10ConstructLEv @ 108 NONAME + _ZN22CPhoneDialerController21SetNumberEntryIsEmptyEi @ 109 NONAME + _ZN22CPhoneDialerController22NumberEntryPromptTextLEv @ 110 NONAME + _ZN22CPhoneDialerControllerC1EP19CPhoneBubbleWrapperR7CCoeEnv @ 111 NONAME + _ZN22CPhoneDialerControllerC2EP19CPhoneBubbleWrapperR7CCoeEnv @ 112 NONAME + _ZN22CPhoneDialerControllerD0Ev @ 113 NONAME + _ZN22CPhoneDialerControllerD1Ev @ 114 NONAME + _ZN22CPhoneDialerControllerD2Ev @ 115 NONAME + _ZNK22CPhoneDialerController11ButtonStateEN22MPhoneDialerController12TButtonIndexE @ 116 NONAME + _ZNK22CPhoneDialerController12ButtonDimmedEN22MPhoneDialerController12TButtonIndexE @ 117 NONAME + _ZNK22CPhoneDialerController13CbaResourceIdEv @ 118 NONAME + _ZNK22CPhoneDialerController13GetButtonDataEN22MPhoneDialerController12TButtonIndexER13RPointerArrayINS0_11CButtonDataEE @ 119 NONAME + _ZNK22CPhoneDialerController14MenuResourceIdEv @ 120 NONAME + _ZNK22CPhoneDialerController18EasyDialingAllowedEv @ 121 NONAME + _ZNK22CPhoneDialerController19EmergencyCallActiveEv @ 122 NONAME + _ZThn4_N22CPhoneDialerController21SetNumberEntryIsEmptyEi @ 123 NONAME + _ZThn4_N22CPhoneDialerController22NumberEntryPromptTextLEv @ 124 NONAME + _ZThn4_NK22CPhoneDialerController11ButtonStateEN22MPhoneDialerController12TButtonIndexE @ 125 NONAME + _ZThn4_NK22CPhoneDialerController12ButtonDimmedEN22MPhoneDialerController12TButtonIndexE @ 126 NONAME + _ZThn4_NK22CPhoneDialerController13CbaResourceIdEv @ 127 NONAME + _ZThn4_NK22CPhoneDialerController14MenuResourceIdEv @ 128 NONAME + _ZThn4_NK22CPhoneDialerController18EasyDialingAllowedEv @ 129 NONAME + _ZThn4_NK22CPhoneDialerController13GetButtonDataEN22MPhoneDialerController12TButtonIndexER13RPointerArrayINS0_11CButtonDataEE @ 130 NONAME diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/group/bld.inf --- a/phoneapp/phoneuiview/group/bld.inf Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/group/bld.inf Sun Mar 14 13:09:36 2010 +0000 @@ -24,7 +24,8 @@ DEFAULT PRJ_EXPORTS - +../inc/mphonedialercontroller.h |../../../inc/mphonedialercontroller.h +../inc/cphonedialercontroller.h |../../../inc/cphonedialercontroller.h // Stub SIS files: ../group/phoneuiview_stub.sis /epoc32/data/z/system/install/phoneuiview_stub.sis diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/group/phoneuiview.mmp --- a/phoneapp/phoneuiview/group/phoneuiview.mmp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/group/phoneuiview.mmp Sun Mar 14 13:09:36 2010 +0000 @@ -65,7 +65,8 @@ SOURCE phonebubbleextension.cpp SOURCE phonebubbleextensiondata.cpp SOURCE cphonetoolbarcontroller.cpp - +SOURCE cphoneeasydialingcontroller.cpp +SOURCE cphonedtmfdialercontroller.cpp /* Languages */ LANG SC diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/inc/cphonedialercontroller.h --- a/phoneapp/phoneuiview/inc/cphonedialercontroller.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/inc/cphonedialercontroller.h Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2009, 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" @@ -20,299 +20,190 @@ #define CPHONEDIALERCONTROLLER_H #include -#include -#include +#include "mphonedialercontroller.h" #include "mphonenumberentrychangedhandler.h" -class CAknToolbar; class CPhoneBubbleWrapper; class CCoeEnv; -class CPhoneMenuController; +class MAknsSkinInstance; class TPhoneCommandParam; -class CAknButton; -class TAknsItemID; -class MPhoneDialerController; -class TPhoneCommandParam; +class CPhoneEasyDialingController; /** - * Dialer controller, updates toolbar buttons + * Dialer controller, provides toolbar button data for the normal mode dialer * * @lib PhoneUIView.lib * @since S60 v5.0 */ -NONSHARABLE_CLASS( CPhoneDialerController ): - public CBase, public MAknToolbarObserver, public MNumberEntryObserver, - public MPhoneNumberEntryChangedHandler +class CPhoneDialerController : + public CBase, + public MPhoneDialerController { -public: +public: // constructor and destructor /** * Two-phased constructor. - * @param aBubbleWrapper - * @param aCoeEnv - * @param aMenuController + * @param aBubbleWrapper Handle to bubble wrapper. Ownership not transferred. + * May be NULL, but then emergency call state can't be identified + * @param aCoeEnv Handle to coeenv. Ownership not transferred. */ - static CPhoneDialerController* NewL( CPhoneBubbleWrapper& aBubbleWrapper, - CCoeEnv& aCoeEnv, - CPhoneMenuController& aMenuController ); + static CPhoneDialerController* NewL( CPhoneBubbleWrapper* aBubbleWrapper, + CCoeEnv& aCoeEnv ); /** * Destructor. */ - virtual ~CPhoneDialerController(); - - /** - * Updates toolbar buttons according to numberentry state. - * - * @since S60 v5.0 - */ - void UpdateToolbar(); - - /** - * Sets state of dtmf dialer visibility. - * - * @since S60 v5.0 - * @param aVisible - */ - void SetDtmfDialerVisibleL( TBool aVisible ); - - /** - * Returns dtmf dialer visibility status. - * - * @since S60 v5.0 - * @return ETrue if DTMF Dialer is visible - */ - TBool IsDTMFDialerVisible() const; - - /** - * Sets state of restricted dialer. - * - * @since S60 v5.0 - * @param aRestricted - */ - void SetRestrictedDialer( TBool aRestricted ); - - /** - * Sets state of service code flag. - * - * @since S60 v5.0 - * @param aCommandParam - */ - void SetServiceCodeFlagL( TPhoneCommandParam* aCommandParam ); - - /** - * Enables toolbar - * - * @since S60 v5.0 - */ - void ShowToolbar(); - - /** - * Disables toolbar - * - * @since S60 v5.0 - */ - void HideToolbar(); - - /** - * Sets custom dialer visible. - * @param aCustomController Pointer to dialer extension implementation - * @since S60 v5.1 - */ - void ShowCustomizedDialerL( - MPhoneDialerController* aCustomController ); + IMPORT_C virtual ~CPhoneDialerController(); - /** - * Sets custom dialer visible. - * @since S60 v5.1 - */ - void HideCustomizedDialer(); - - /** - * Returns flag indicating if customized dialer is visible. - * @return ETrue if customized dialer visible, else EFalse - * @since S60 v5.1 - */ - TBool IsCustomizedDialerVisible() const; - - /** - * Returns sotkeys resource of the customized dialer - * @return Customized dialer softkeys resource id - * @since S60 v5.1 - */ - TInt CustomizedCbaResourceId() const; - - /** - * Returns menu resource of the customized dialer - * @return Customized dialer menu resource id - * @since S60 v5.1 - */ - TInt CustomizedMenuResourceId() const; - -public: // from MAknToolbarObserver - /** - * From base class MAknToolbarObserver - * Handles toolbar events for a certain toolbar item. - * - * @param aCommand The command ID of some toolbar item. - */ - void OfferToolbarEventL( TInt aCommand ); - - /** - * From base class MAknToolbarObserver - * Should be used to set the properties of some toolbar components - * before it is drawn. - * - * @param aResourceId The resource ID for particular toolbar - * @param aToolbar The toolbar object pointer - */ - void DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar ); - -public: // from MNumberEntryObserver - /** - * From base class MNumberEntryObserver - * Indication that numberentry state changed - * - * @since S60 v5.0 - */ - void NumberEntryStateChanged( TBool aHidePromptText ); - -public: // from base class MPhoneNumberEntryChangedHandler - - /** - * From MPhoneNumberEntryChangedHandler - * - * Handles number entry state change. - * Checks has the content of the number entry been modifed. - * Informs the via call back functionality the party interested about - * the change. (at the moment phone state machine) - * - * @since S60 5.0 - */ - void HandleNumberEntryChanged( ); - - /** - * From MPhoneNumberEntryChangedHandler - * - * Sets the call back function that is used to get notification when the - * content of the Number Entry has changed. (Used by the the phone - * statemachine.) - * - * @since S60 5.0 - */ - void SetNumberEntryChangedCallBack( TPhoneCommandParam* aCommandParam ); - -private: - - /** - * Creates CAknButton with given parameters and leaves it to - * CleanupStack. - * - * @param aNormalIconId - * @param aNormalMaskId - * @param aTooltipText - * @param aSkinIconId - * @param aCommand - */ - CAknButton* CreateButtonLC( TInt aNormalIconId, - TInt aNormalMaskId, - const TDesC& aTooltipText, - const TAknsItemID& aSkinIconId, - TInt aCommand ); - - /** - * Creates button set for an empty Number Entry. - */ - void CreateButtonSetNumberEntryEmpty(); - - /** - * Creates button set for Number Entry when some charaters - * have been entered. - */ - void CreateButtonSetNumberEntryNotEmpty(); +protected: // constructors /** * Constructor. * * @param aBubbleWrapper * @param aCoeEnv - * @param aMenuController */ - CPhoneDialerController( CPhoneBubbleWrapper& aBubbleWrapper, - CCoeEnv& aCoeEnv, - CPhoneMenuController& aMenuController ); + IMPORT_C CPhoneDialerController( CPhoneBubbleWrapper* aBubbleWrapper, + CCoeEnv& aCoeEnv ); /** * Symbian 2nd phase constructor. * */ - void ConstructL(); + IMPORT_C void ConstructL(); - /** - * Searches the skin id for the given icon. - */ - inline TAknsItemID SkinId( TInt aIconIndex ); +public: // new methods /** - * Searches the tooltip text for the button using the - * the given command id. + * Sets state of restricted dialer. + * + * @since S60 v5.0 + * @param aRestricted + */ + void SetRestrictedDialer( TBool aRestricted ); + + /** + * Sets state of service code flag. + * + * @since S60 v5.0 + * @param aCommandParam + */ + void SetServiceCodeFlag( TPhoneCommandParam* aCommandParam ); + + /** + * Sets handle to the Easy Dialing controller. * - * @param aCommandId the command id - * @param aText the searched tooltip text + * @since S60 v5.2 + * @param aController Easy Dialing controller. Ownership not transferred. */ - void GetTooltipTextL( TInt aCommandId, HBufC*& aText ); + void SetEasyDialingController( CPhoneEasyDialingController* aController ); -private: // data +public: // From MPhoneDialerController + + /** + * @see MPhoneDialerController + */ + IMPORT_C TInt CbaResourceId() const; + /** - * AknToolbar. - * Not own. + * @see MPhoneDialerController + */ + IMPORT_C TInt MenuResourceId() const; + + /** + * @see MPhoneDialerController */ - CAknToolbar* iToolbar; + IMPORT_C const TDesC& NumberEntryPromptTextL(); + + /** + * @see MPhoneDialerController + */ + + /** + * @see MPhoneDialerController + */ + IMPORT_C TInt GetButtonData( TButtonIndex aIndex, RPointerArray& aData ) const; /** - * The reference to the Bubblewrapper + * @see MPhoneDialerController + */ + IMPORT_C void SetNumberEntryIsEmpty( TBool aEmpty ); + + /** + * @see MPhoneDialerController + */ + IMPORT_C TInt ButtonState( TButtonIndex aIndex ) const; + + /** + * @see MPhoneDialerController + */ + IMPORT_C TBool ButtonDimmed( TButtonIndex aIndex ) const; + + /** + * @see MPhoneDialerController + */ + IMPORT_C TBool EasyDialingAllowed() const; + +public: // data types + /** + * Initialization data for one toolbar button state. */ - CPhoneBubbleWrapper& iBubbleWrapper; + struct TLocalButtonData + { + TInt iCommandId; + TInt iSkinItemIdMinor; + TInt iBitmapIndex; + TInt iBitmapMaskIndex; + TInt iTooltipResourceId; + }; + +protected: // methods /** + * Check is there an emergency call ongoing. + * @return ETrue if there's an active emergency call. + * EFalse otherwise. + */ + TBool EmergencyCallActive() const; + + /** + * Create button data object from given source data. + * @param aSourceData Defines, where the data should be loaded. + * @param aSkin Skin instance. Ownership not transferred. + * @param aMifFile Full path to the MIF file holding the fallback graphics. + * @return New CButtonData instance. Ownership is transferred. + */ + CButtonData* CreateButtonDataL( const TLocalButtonData& aSourceData, + MAknsSkinInstance* aSkin, const TDesC& aMifFile ) const; + +protected: // data + /** * CoeEnv */ CCoeEnv& iCoeEnv; /** - * Menucontroller + * Handle to the Bubblewrapper. May be NULL. Not owned. */ - CPhoneMenuController& iMenuController; + CPhoneBubbleWrapper* iBubbleWrapper; /** - * Used to check is the Dialer in DTMF mode + * Handle to Easy Dialing controller. May be NULL. Not owned. */ - TBool iDtmfDialerVisible; - + CPhoneEasyDialingController* iEasyDialingController; + /** * Used to check is the Dialer in the restricted mode. - * 'Send' and 'Add to Contacts' buttons are dimmed. */ - TBool iRestrictedDialer; + TBool iRestrictedDialer; /** - * Used to check is the service code flag set. - * Tooltip text is changed between 'Send' or 'Call' + * Used to check is the service code flag set, meaning that number entry + * contains a service code rather than phone number. */ TBool iServiceCodeFlag; - /* - * Is used to check has the hide prompt text flag changed. + /** + * Store availability of phone number (etc) in the number entry. */ - TBool iPreviousHidePromptTextStatus; - - // Pointer to dialer extension implementation - MPhoneDialerController* iCustomizedDialer; - - /** - * Is used to check should toolbar be updated. - */ - TBool iUpdateToolbar; - + TBool iNumberAvailable; }; -#include "cphonedialercontroller.inl" - #endif // CPHONEDIALERCONTROLLER_H diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/inc/cphonedialercontroller.inl --- a/phoneapp/phoneuiview/inc/cphonedialercontroller.inl Mon Mar 08 21:43:24 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* -* Copyright (c) 2008 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: private, CPhoneDialerController -* -*/ - -#ifndef CPHONEDIALERCONTROLLER_INL_ -#define CPHONEDIALERCONTROLLER_INL_ - -#include -#include - -// --------------------------------------------------------------------------- -// SkinId -// --------------------------------------------------------------------------- -// -inline TAknsItemID CPhoneDialerController::SkinId( TInt aIconIndex ) - { - TAknsItemID skinId; - - switch ( aIconIndex ) - { - case EMbmPhoneuiQgn_indi_dialer_call_send: - skinId = KAknsIIDQgnIndiDialerCallSend; - break; - case EMbmPhoneuiQgn_indi_button_send_dtmf: - skinId = KAknsIIDQgnIndiButtonSendDtmf; - break; - case EMbmPhoneuiQgn_indi_dialer_contacts: - skinId = KAknsIIDQgnIndiDialerContacts; - break; - case EMbmPhoneuiQgn_indi_dialer_add_contacts: - skinId = KAknsIIDQgnIndiDialerAddContacts; - break; - case EMbmPhoneuiQgn_indi_dialer_clear: - skinId = KAknsIIDQgnIndiDialerClear; - break; - default: - skinId = KAknsIIDNone; - break; - } - return skinId; - } - -#endif /*CPHONEDIALERCONTROLLER_INL_*/ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/inc/cphonedialerview.h --- a/phoneapp/phoneuiview/inc/cphonedialerview.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/inc/cphonedialerview.h Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2008 - 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" @@ -56,6 +56,13 @@ */ void HandleResourceChange( TInt aType ); + /** + * From CCoeControl + * @param aVisible : ETrue if view is to be shown + * EFalse if view is to be hidden + */ + void MakeVisible( TBool aVisible ); + public: // New functions /** @@ -75,7 +82,7 @@ * @param aStatus ETrue for the security mode. EFalse for the * normal mode. */ - void SetSecurityMode ( TBool aStatus ); + void SetSecurityMode( TBool aStatus ); /** * Get state of the security mode flag diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/inc/cphonedtmfdialercontroller.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiview/inc/cphonedtmfdialercontroller.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,102 @@ +/* +* Copyright (c) 2009 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: Controller for DTMF mode of Dialer +* +*/ + +#ifndef CPHONEDTMFDIALERCONTROLLER_H +#define CPHONEDTMFDIALERCONTROLLER_H + +// INCLUDES +#include +#include +#include "cphonedialercontroller.h" + +// CLASS DECLARATION + +/** + * CPhoneDtmfDialerController + * + * Provides data for the DTMF mode of the dialer. + */ +NONSHARABLE_CLASS( CPhoneDtmfDialerController ) : public CPhoneDialerController + { +public: // Constructors and destructor + + /** + * Destructor. + */ + ~CPhoneDtmfDialerController(); + + /** + * Two-phased constructor. + */ + static CPhoneDtmfDialerController* NewL( + CPhoneBubbleWrapper* aBubbleWrapper, + CCoeEnv& aCoeEnv ); + + /** + * Two-phased constructor. + */ + static CPhoneDtmfDialerController* NewLC( + CPhoneBubbleWrapper* aBubbleWrapper, + CCoeEnv& aCoeEnv ); + +private: + + /** + * Constructor for performing 1st stage construction + */ + CPhoneDtmfDialerController( + CPhoneBubbleWrapper* aBubbleWrapper, + CCoeEnv& aCoeEnv ); + + /** + * Symbian default constructor for performing 2nd stage construction + */ + void ConstructL(); + +public: // from CPhoneDialerController + + /** + * @see MPhoneDialerController + */ + const TDesC& NumberEntryPromptTextL(); + + /** + * @see MPhoneDialerController + */ + TInt GetButtonData( TButtonIndex aIndex, RPointerArray& aData ) const; + + /** + * @see MPhoneDialerController + */ + TInt ButtonState( TButtonIndex aIndex ) const; + + /** + * @see MPhoneDialerController + */ + TBool ButtonDimmed( TButtonIndex aIndex ) const; + + /** + * @see MPhoneDialerController + */ + TBool EasyDialingAllowed() const; + +private: // data + + HBufC* iPromptText; // OWN + }; + +#endif // CPHONEDTMFDIALERCONTROLLER_H diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/inc/cphoneeasydialingcontroller.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiview/inc/cphoneeasydialingcontroller.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,76 @@ +/* +* Copyright (c) 2009 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: Class handles Easy dialing specific commands +* +*/ + +#ifndef CPHONEEASYDIALINGCONTROLLER_H +#define CPHONEEASYDIALINGCONTROLLER_H + +//INCLUDES +#include +#include "phoneviewcommanddefinitions.h" + +//FORWARD +class CDialer; +class TPhoneCommandParam; +class CDialingExtensionInterface; + +/** + * Class takes care of Easy dialing + * + * @lib phoneuicontrol + * @since S60 v9.2 + */ +NONSHARABLE_CLASS( CPhoneEasyDialingController ) : public CBase + { + public: + + /** + * Creates new instance of CPhoneEasyDialingController + * @param aDialer: reference to dialer + * @return CPhoneEasyDialingController* object + */ + static CPhoneEasyDialingController* NewL( + CDialer& aDialer ); + + /** + * Destructor. + */ + virtual ~CPhoneEasyDialingController(); + + void ExecuteCommandL( + TPhoneViewCommandId aCmdId, + TPhoneCommandParam* aCommandParam ); + + TPhoneViewResponseId HandleCommandL( TPhoneViewCommandId aCmdId ); + + TBool InitializeEasyDialingMenuL( TPhoneCommandParam* aCommandParam ); + + private: + + /** + * C++ default constructor. + */ + CPhoneEasyDialingController(CDialer& aDialer); + + private: + // Dialer. Not owned + CDialer& iDialer; + + // Easydialing in interface. Not owned. + CDialingExtensionInterface* iEasyDialing; + }; + +#endif //CPHONEEASYDIALINGCONTROLLER_H diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/inc/cphonemenucontroller.h --- a/phoneapp/phoneuiview/inc/cphonemenucontroller.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/inc/cphonemenucontroller.h Sun Mar 14 13:09:36 2010 +0000 @@ -116,7 +116,11 @@ void SendAiwCommandL( TPhoneCommandParam* aCommandParam ); void SetContextMenu( TPhoneCommandParam* aCommandParam ); - + + void SetInvalidCsPhoneNumberFlag( TPhoneCommandParam* aCommandParam ); + + void GetInvalidCsPhoneNumberFlag( TPhoneCommandParam* aCommandParam ); + public: //from base class void HandlePropertyChangedL( @@ -181,6 +185,8 @@ TBool iAllowDtmfOptionsFlag; TBool iVoipEnabledFlag; TBool iHideVideoCallDTMFVisibility; + TBool iInvalidCsPhoneNumber; + // Eikon environment delivered from CPhoneViewController CEikonEnv& iEikEnv; // Pointer to AIW service handler. OWNED. diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/inc/cphoneviewcontroller.h --- a/phoneapp/phoneuiview/inc/cphoneviewcontroller.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/inc/cphoneviewcontroller.h Sun Mar 14 13:09:36 2010 +0000 @@ -33,6 +33,7 @@ #include "tphonecmdparamtranseffect.h" #include "mphoneviewblockingdialogobserver.h" +#include "mnumberentry.h" // FORWARD DECLARATIONS class CPhoneButtonsController; @@ -76,12 +77,15 @@ class CDialer; class MPhoneNumberEntryChangedHandler; class MPhoneViewCustomization; +class CPhoneEasyDialingController; +class CPhoneDtmfDialerController; class CPhoneViewController : public CBase, public MPhoneViewCommandHandle, public MPhoneStatusPaneObserver, - public MPhoneViewBlockingDialogObserver + public MPhoneViewBlockingDialogObserver, + public MNumberEntryObserver { public: // Constructors and destructor @@ -245,6 +249,12 @@ */ IMPORT_C void SetBlockingDialogIsDisplayed( TBool aBlockingDialog ); + /** + * From base class MNumberEntryObserver + * Indication that numberentry state changed + */ + void NumberEntryStateChanged( TBool aEntryHasText ); + private: // New functions /** @@ -592,12 +602,6 @@ */ TInt FindAppByWgIDL( TInt aAppWgID ); - /** - * Returns pointer to the control that is responsible of handling - * Phone Number Entry Changed events. - */ - MPhoneNumberEntryChangedHandler* NumberEntryChangedHandler() const; - /** * Returns single item fetch type * @return single item fetch type @@ -614,6 +618,16 @@ */ void DisableKeyLock(); + /** + * Checks if DTMF dialer mode is currently active + */ + TBool IsDtmfDialerActive() const; + + /** + * Checks if custom dialer mode is currently active + */ + TBool IsCustomDialerActive() const; + private: // Data CPhoneView* iPhoneView; @@ -634,9 +648,15 @@ // 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; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/inc/mphonedialercontroller.h --- a/phoneapp/phoneuiview/inc/mphonedialercontroller.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/inc/mphonedialercontroller.h Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007 - 2009 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" @@ -18,27 +18,58 @@ #ifndef MPHONEDIALERCONTROLLER_H_ #define MPHONEDIALERCONTROLLER_H_ -// Forward declarations -class CAknToolbar; +#include +#include + /** - * Abstract custom dialer interface. - * + * Abstract dialer controller interface. + * Dialer controller provides data to be shown on dialer UI + * (e.g. prompt text and toolbar button contents), but is + * agnostic to implementation details and layout of the + * dialer UI components. * * @lib PhoneUiView.lib * @since S60 v5.0 */ class MPhoneDialerController { - -public: - +public: // data types + + /** + * Indices to refer to visual button slots in the dialer toolbar. + * The index order in not necessarily the same as the visual + * order of the buttons. The index names correspond to the button + * functions in the normal dialer mode. + * @since S60 v5.2 + */ + enum TButtonIndex + { + EClearButton = 0, //< Button normally used for backspce + ECallButton, //< Button normally used for "call" and "log" + EPhonebookButton, //< Button normally used for "Phonebook" and "Add to Phonebook" + + ENumberOfButtons //< Total number of buttons in the toolbar. + }; + /** - * Initializes the controller. - * @param aToolbar CAknToolbar instance. - * @since S60 v5.1 - */ - virtual void InitializeL( CAknToolbar& aToolbar ) = 0; + * Struct-like class encapsulating data of one toolbar button function. + * @since S60 v5.2 + */ + class CButtonData : public CBase + { + public: // data + TInt iCommandId; + CGulIcon* iIcon; // OWN + HBufC* iTooltip; // OWN + public: // constructors & destructor + inline CButtonData() {} + inline CButtonData( TInt aCommandId, CGulIcon* aIcon, HBufC* aTooltip ) : + iCommandId( aCommandId ), iIcon( aIcon ), iTooltip( aTooltip ) {} + inline ~CButtonData() { delete iIcon; delete iTooltip; } + }; + +public: /** * Returns Cba resource id @@ -60,20 +91,53 @@ * @since S60 v5.1 */ virtual const TDesC& NumberEntryPromptTextL() = 0; + + /** + * Get contents for given toolbar button. One button may have zero or more + * different functions. Which one is set active, depends on the return value + * of the member function ButtonState(). + * @param aIndex Index of the button for which data is queried. + * @param aData On return, contains all the possible states for the button. + * @return KErrNone if action was succesful. + * System wide error code if something went wrong. + * @since S60 v5.2 + */ + virtual TInt GetButtonData( TButtonIndex aIndex, RPointerArray& aData ) const = 0; + + /** + * Function used to tell controller if number entry is empty or not. + * In many cases this has an influence on the status of some or all toolbar buttons. + * @param aEmpty ETrue if number entry is empty, EFalse othwerwise. + * @since S60 v5.2 + */ + virtual void SetNumberEntryIsEmpty( TBool aEmpty ) = 0; /** - * Handles the number entry empty event - * @param aEmpty ETrue if numberentry is empty - * @since S60 v5.1 - */ - virtual void HandleNumberEntryIsEmpty( TBool aEmpty ) = 0; - + * Gets current state of the given button. + * @param aIndex Index of the button for which state is queried. + * @return Index of the button state which should be active. + * KErrNotFound if the given button has no states. + * @since S60 v5.2 + */ + virtual TInt ButtonState( TButtonIndex aIndex ) const = 0; + /** - * Sets visibility of buttons created by the implementation - * @param aShow ETrue if numberentry is empty - * @since S60 v5.1 - */ - virtual void ShowButtons( TBool aShow ) = 0; + * Gets dimming status of the given button + * @param aIndex Index of the button for which dimming status is queried. + * @return ETrue if the given button should be dimmed. + * EFalse otherwise. + * @since S60 v5.2 + */ + virtual TBool ButtonDimmed( TButtonIndex aIndex ) const = 0; + + /** + * Gets value indicating whether using Easy Dialing should be allowed in + * the current Dialer mode. + * @return ETrue if Easy Dialing can be enabled. + * EFalse if Easy Dialing must not be enabled. + * @since S60 v5.2 + */ + virtual TBool EasyDialingAllowed() const = 0; }; #endif /*MDIALERCONTROLLER_H_*/ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h --- a/phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/inc/phoneviewcommanddefinitions.h Sun Mar 14 13:09:36 2010 +0000 @@ -160,7 +160,7 @@ EPhoneViewGetIsConferenceInSelectionMode, EPhoneViewIsStraightCallToVideoMailBox, EPhoneViewSetDtmfDialerViewVisible, // 130 - EPhoneViewSetRetrictedDialer, + EPhoneViewSetRestrictedDialer, EPhoneViewIsConferenceInExpandedMode, EPhoneViewIsMenuBarVisible, EPhoneViewGetBlockingDialogStatus, @@ -227,7 +227,13 @@ EPhoneViewSetToolbarDimming, EPhoneViewEnableToolbarButton, EPhoneViewHideToolbar, - EPhoneViewShowToolbar, + EPhoneViewShowToolbar, + EPhoneViewGetEasyDialingInFocusStatus, + EPhoneViewSetInvalidCsPhoneNumberFlag, + EPhoneViewGetInvalidCsPhoneNumberFlag, + EPhoneViewGetEasyDialingMenuId, + EPhoneViewGetEasyDialingCbaId, + EPhoneAmountOfCommands, // Don't remove this, this should always be the last in list. }; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphoneaudioplayer.cpp --- a/phoneapp/phoneuiview/src/cphoneaudioplayer.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/src/cphoneaudioplayer.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -998,11 +998,11 @@ TInt result( 0 ); - if ( iFormat == EFormatTone ) + if ( iFormat == EFormatTone && iTonePlayer ) { result = iTonePlayer->MaxVolume() * aVolume / KMaxVolumeLevel; } - else if ( iFormat == EFormatTts ) + else if ( iFormat == EFormatTts && iTtsPlayer ) { result = iTtsPlayer->MaxVolume() * aVolume / KMaxVolumeLevel; } @@ -1041,11 +1041,11 @@ //_DPRINT( 5, "P.Aud.Mute" ); if ( iPlayerStatus == ETonePlaying ) { - if ( iFormat == EFormatTone ) + if ( iFormat == EFormatTone && iTonePlayer ) { iTonePlayer->SetVolume(0); } - else if ( iFormat == EFormatTts ) + else if ( iFormat == EFormatTts && iTtsPlayer ) { iTtsPlayer->SetVolume(0); } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphonebubblewrapper.cpp --- a/phoneapp/phoneuiview/src/cphonebubblewrapper.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/src/cphonebubblewrapper.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -895,7 +895,11 @@ CCoeControl* control(NULL); if ( iUseDialer ) { - control = iDialerNumberEntry->GetNumberEntry(); + // TODO: We should try to clarify the dialer control hierarchy. + // Currently, we have three controls, each of which are somewhere + // referred as "number entry": CDialer, CDialerNumberEntry, and CAknPhoneNumberEditor. + // Each of these are present on the code line below. + control = iDialerNumberEntry->GetNumberEntry()->Parent(); } else { diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphonedialercontroller.cpp --- a/phoneapp/phoneuiview/src/cphonedialercontroller.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/src/cphonedialercontroller.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2009, 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" @@ -21,67 +21,99 @@ #include #include #include -#include -#include #include +#include #include +#include #include #include #include "cphonedialercontroller.h" +#include "cphoneeasydialingcontroller.h" #include "cphonebubblewrapper.h" #include "phoneui.hrh" -#include "phonerssbase.h" #include "tphonecmdparaminteger.h" -#include "cphonemenucontroller.h" #include "cphonemainresourceresolver.h" #include "tphonecmdparamcallstatedata.h" #include "tphonecmdparamboolean.h" -#include "mphonedialercontroller.h" _LIT ( KPhoneMifFileName, "phoneui.mif" ); -_LIT( KDialerToolbarButtonEmptyStr, "" ); + -const TInt KNumberOfButtons = 6; -struct SPhoneDialerToolbarButton +/** States for Call button. */ +enum TCallButtonState + { + ECallButtonCallStateIndex = 0, + ECallButtonLogStateIndex, + ECallButtonSendStateIndex + }; +static const CPhoneDialerController::TLocalButtonData KCallButtonDataTable[] = { - TInt iIconIndex; - TInt iMaskIndex; - TInt iCommandId; + { EPhoneNumberAcqCmdSendCommand, + EAknsMinorGenericQgnIndiButtonAnswerWhite, + EMbmPhoneuiQgn_indi_button_answer_white, + EMbmPhoneuiQgn_indi_button_answer_white_mask, + R_PHONEUI_DIALER_TOOLTIP_CALL + }, + { EPhoneDialerCmdLog, + EAknsMinorGenericQgnIndiButtonLogdialerWhite, + EMbmPhoneuiQgn_indi_button_logdialer_white, + EMbmPhoneuiQgn_indi_button_logdialer_white_mask, + R_PHONEUI_DIALER_TOOLTIP_RECENT_CALLS + }, + { EPhoneNumberAcqCmdSendCommand, + EAknsMinorGenericQgnIndiButtonAnswerWhite, + EMbmPhoneuiQgn_indi_button_answer_white, + EMbmPhoneuiQgn_indi_button_answer_white_mask, + R_PHONEUI_DIALER_TOOLTIP_SEND + } }; +static const TInt KCallButtonDataTableCount = + sizeof( KCallButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData ); + -const SPhoneDialerToolbarButton bArray[KNumberOfButtons] = - { - { EMbmPhoneuiQgn_indi_dialer_call_send, - EMbmPhoneuiQgn_indi_dialer_call_send_mask, - EPhoneDialerCmdLog - }, - { EMbmPhoneuiQgn_indi_dialer_call_send, - EMbmPhoneuiQgn_indi_dialer_call_send_mask, - EPhoneNumberAcqCmdSendCommand - }, - - { EMbmPhoneuiQgn_indi_button_send_dtmf, - EMbmPhoneuiQgn_indi_button_send_dtmf_mask, - EPhoneCmdDtmfOk - }, - { EMbmPhoneuiQgn_indi_dialer_contacts, - EMbmPhoneuiQgn_indi_dialer_contacts_mask, - EPhoneDialerCmdContacts - }, - { EMbmPhoneuiQgn_indi_dialer_add_contacts, - EMbmPhoneuiQgn_indi_dialer_add_contacts_mask, - EPhoneNumberAcqCmdAddToContacts - }, - { EMbmPhoneuiQgn_indi_dialer_clear, - EMbmPhoneuiQgn_indi_dialer_clear_mask, - EPhoneDialerCmdClear - } - }; +/** States for Phonebook button */ +enum TPhonebookButtonState + { + EPhonebookButtonContactsIndex = 0, + EPhonebookButtonAddContactIndex + }; +static const CPhoneDialerController::TLocalButtonData KPhonebookButtonDataTable[] = + { + { EPhoneDialerCmdContacts, + EAknsMinorGenericQgnIndiDialerContacts, + EMbmPhoneuiQgn_indi_dialer_contacts, + EMbmPhoneuiQgn_indi_dialer_contacts_mask, + R_PHONEUI_DIALER_TOOLTIP_CONTACTS + }, + { EPhoneNumberAcqCmdAddToContacts, + EAknsMinorGenericQgnIndiDialerAddContacts, + EMbmPhoneuiQgn_indi_dialer_add_contacts, + EMbmPhoneuiQgn_indi_dialer_add_contacts_mask, + R_PHONEUI_DIALER_TOOLTIP_ADD_TO_CONTACTS + } + }; +static const TInt KPhonebookButtonDataTableCount = + sizeof( KPhonebookButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData ); -const TInt KDialerToolbarButtonCount = 6; -const TInt KDialerToolbarButtonKeyRepeatDelay = 300; -const TInt KDialerToolbarKeyRepeatInterval = 75; + +/** States for Clear button */ +enum TClearButtonState + { + EClearButtonClearIndex = 0 + }; +static const CPhoneDialerController::TLocalButtonData KClearButtonDataTable[] = + { + { EPhoneDialerCmdClear, + EAknsMinorGenericQgnIndiDialerClear, + EMbmPhoneuiQgn_indi_dialer_clear, + EMbmPhoneuiQgn_indi_dialer_clear_mask, + R_PHONEUI_DIALER_TOOLTIP_CLEAR + } + }; +static const TInt KClearButtonDataTableCount = + sizeof( KClearButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData ); + // ======== MEMBER FUNCTIONS ======== @@ -89,14 +121,11 @@ // Constructor // --------------------------------------------------------------------------- // -CPhoneDialerController::CPhoneDialerController( - CPhoneBubbleWrapper& aBubbleWrapper, - CCoeEnv& aCoeEnv, - CPhoneMenuController& aMenuController ): - iBubbleWrapper ( aBubbleWrapper ), - iCoeEnv ( aCoeEnv ), - iMenuController( aMenuController ), - iUpdateToolbar( EFalse ) +EXPORT_C CPhoneDialerController::CPhoneDialerController( + CPhoneBubbleWrapper* aBubbleWrapper, + CCoeEnv& aCoeEnv ): + iCoeEnv( aCoeEnv ), + iBubbleWrapper( aBubbleWrapper ) { } @@ -104,114 +133,20 @@ // Second phase constructor // --------------------------------------------------------------------------- // -void CPhoneDialerController::ConstructL() +EXPORT_C void CPhoneDialerController::ConstructL() { - - iBubbleWrapper.SetNumberEntryObserver( *this ); - - if ( !iToolbar ) - { - iToolbar = CAknToolbar::NewL( R_PHONEUI_TOOLBAR ); - } - - CEikAppUiFactory* appUiFactory = - static_cast( CEikonEnv::Static()->AppUiFactory() ); - appUiFactory->SetViewFixedToolbar( iToolbar ); - - if( iToolbar ) - { - iToolbar->SetToolbarObserver( - static_cast( this )); - iToolbar->SetWithSliding( EFalse ); - iToolbar->SetCloseOnAllCommands( EFalse ); - iToolbar->SetFocusing( EFalse ); - - CAknButton* button( NULL ); - - for( TInt i = 0; i < KDialerToolbarButtonCount; i++ ) - { - TAknsItemID skinId = SkinId( bArray[i].iIconIndex ); - // Load tooltip text. - HBufC* tooltipText; - GetTooltipTextL ( bArray[i].iCommandId, tooltipText ); - CleanupStack::PushL( tooltipText ); - - button = CreateButtonLC( - bArray[i].iIconIndex, - bArray[i].iMaskIndex, - *tooltipText, - skinId, - bArray[i].iCommandId ); - // Takes ownership of the button - iToolbar->AddItemL( button, EAknCtButton, bArray[i].iCommandId,0 ); - - CleanupStack::Pop( button ); - CleanupStack::PopAndDestroy( tooltipText ); - } - - // Hide 'Send dtmf' icon - iToolbar->HideItem( EPhoneCmdDtmfOk, ETrue, EFalse ); - TRAP_IGNORE(iToolbar->DisableToolbarL( ETrue )); - } } // --------------------------------------------------------------------------- -// CreateButtonL -// --------------------------------------------------------------------------- -// -CAknButton* CPhoneDialerController::CreateButtonLC( - TInt aNormalIconId, - TInt aNormalMaskId, - const TDesC& aTooltipText, - const TAknsItemID& aSkinIconId, - TInt aCommand ) - { - TFileName mifPath( KDriveZ ); - mifPath.Append( KDC_APP_BITMAP_DIR ); - mifPath.Append( KPhoneMifFileName ); - - - CAknButton* button = CAknButton::NewLC( - mifPath, - aNormalIconId, - aNormalMaskId, - -1, -1, // dimmed - -1, -1, // pressed - -1, -1, // hover - KDialerToolbarButtonEmptyStr(), - aTooltipText, // help - 0, // flags - 0, // state flags - aSkinIconId ); - - if( aCommand == EPhoneDialerCmdClear ) - { - button->SetButtonFlags( KAknButtonKeyRepeat ); - // delay 300 ms and repeat 75 ms interval - button->SetKeyRepeatInterval( KDialerToolbarButtonKeyRepeatDelay, - KDialerToolbarKeyRepeatInterval ); - } - - button->SetFocusing( EFalse ); - button->SetBackground( iToolbar ); - - return button; - } - - -// --------------------------------------------------------------------------- // Static constructor // --------------------------------------------------------------------------- // CPhoneDialerController* CPhoneDialerController::NewL( - CPhoneBubbleWrapper& aBubbleWrapper, - CCoeEnv& aCoeEnv, - CPhoneMenuController& aMenuController ) + CPhoneBubbleWrapper* aBubbleWrapper, + CCoeEnv& aCoeEnv ) { - CPhoneDialerController* self = new (ELeave) CPhoneDialerController( - aBubbleWrapper - , aCoeEnv - , aMenuController ); + CPhoneDialerController* self = + new (ELeave) CPhoneDialerController( aBubbleWrapper, aCoeEnv ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -222,197 +157,11 @@ // Destructor // --------------------------------------------------------------------------- // -CPhoneDialerController::~CPhoneDialerController() - { - delete iToolbar; - } - -// --------------------------------------------------------------------------- -// NumberEntryStateChanged -// --------------------------------------------------------------------------- -// -void CPhoneDialerController::NumberEntryStateChanged( TBool aHidePromptText ) - { - if( aHidePromptText != iPreviousHidePromptTextStatus ) - { - iPreviousHidePromptTextStatus = aHidePromptText; - iUpdateToolbar = ETrue; - } - - HandleNumberEntryChanged(); - - } - -// --------------------------------------------------------------------------- -// HandleNumberEntryChanged -// --------------------------------------------------------------------------- -// -void CPhoneDialerController::HandleNumberEntryChanged() - { - if( iUpdateToolbar ) - { - UpdateToolbar(); - iUpdateToolbar = EFalse; - } - - iBubbleWrapper.HandleNumberEntryChanged(); - - } - -// --------------------------------------------------------------------------- -// HandleNumberEntryChanged -// --------------------------------------------------------------------------- -// -void CPhoneDialerController::SetNumberEntryChangedCallBack( - TPhoneCommandParam* aCommandParam ) +EXPORT_C CPhoneDialerController::~CPhoneDialerController() { - iBubbleWrapper.SetNumberEntryChangedCallBack( aCommandParam ); - - } - -// --------------------------------------------------------------------------- -// CreateButtonSetNumberEntryEmpty -// --------------------------------------------------------------------------- -// -void CPhoneDialerController::CreateButtonSetNumberEntryEmpty() - { - - if( iToolbar ) - { - if( iDtmfDialerVisible ) - { - // Dim 'Send dtmf' - iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, ETrue, EFalse ); - } - else if ( iCustomizedDialer ) - { - iCustomizedDialer->HandleNumberEntryIsEmpty( ETrue ); - } - else - { - // Show 'Logs ' and 'Contacts' items - iToolbar->HideItem( EPhoneDialerCmdLog, EFalse,EFalse ); - iToolbar->HideItem( EPhoneDialerCmdContacts, EFalse, EFalse ); - - if ( iRestrictedDialer ) - { - // Dim 'Logs' - iToolbar->SetItemDimmed( EPhoneDialerCmdLog, ETrue - , EFalse ); - // Dim 'Contacts' - iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, ETrue - , EFalse ); - } - - // Hide 'Send' and 'Add to contacts' - iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, ETrue - , EFalse ); - iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, ETrue - , EFalse ); - } - } } // --------------------------------------------------------------------------- -// CreateButtonSetNumberEntryNotEmpty -// --------------------------------------------------------------------------- -// -void CPhoneDialerController::CreateButtonSetNumberEntryNotEmpty() - { - if( iToolbar ) - { - if( iDtmfDialerVisible ) - { - // Show 'Send dtmf' - iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, EFalse, EFalse ); - } - else if ( iCustomizedDialer ) - { - iCustomizedDialer->HandleNumberEntryIsEmpty( EFalse ); - } - else - { - // Show 'Send' and 'Add to contacts' - iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, EFalse - , EFalse ); - iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, EFalse - , EFalse ); - - if ( iRestrictedDialer ) - { - // Dim 'Send' - iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, ETrue - , EFalse ); - // Dim 'Add to Contacts' - iToolbar->SetItemDimmed( EPhoneNumberAcqCmdAddToContacts, ETrue - , EFalse ); - } - - // Hide 'Logs ' and 'Contacts' - iToolbar->HideItem( EPhoneDialerCmdLog, ETrue,EFalse ); - iToolbar->HideItem( EPhoneDialerCmdContacts, ETrue, EFalse ); - - TPhoneCmdParamCallStateData callStateData; - callStateData.SetCallState( EPEStateConnected ); - iBubbleWrapper.GetCallIdByState( &callStateData ); - TInt connected = callStateData.CallId(); - - //If there is a active emergency call, Send item must be dimmed. - if ( connected == KEmergencyCallId ) - { - //Dim Send - iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, ETrue - ,EFalse ); - } - else - { - //UnDim - iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, EFalse - ,EFalse ); - } - } - } - } - -// --------------------------------------------------------------------------- -// SetDtmfDialerVisibleL -// --------------------------------------------------------------------------- -// -void CPhoneDialerController::SetDtmfDialerVisibleL( TBool aVisible ) - { - iDtmfDialerVisible = aVisible; - - if( iDtmfDialerVisible ) - { - // Load prompt resource text to DTMF dialer. - TInt resourceId = CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneDtmfDialerNumberEntryPromptText ); - - HBufC* loadedText = StringLoader::LoadL( resourceId - , &iCoeEnv ); - - iBubbleWrapper.SetNumberEntryPromptText( loadedText->Des() ); - - delete loadedText; - } - else - { - // Clear prompt text. - iBubbleWrapper.SetNumberEntryPromptText( KNullDesC ); - - // Hide - iToolbar->HideItem( EPhoneCmdDtmfOk, ETrue, EFalse ); - - // Show - iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, EFalse, EFalse ); - iToolbar->HideItem( EPhoneDialerCmdLog, EFalse, EFalse ); - iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, EFalse, EFalse ); - // Dimming - iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, EFalse, EFalse ); - } - } - -// --------------------------------------------------------------------------- // SetRestrictedDialerL // --------------------------------------------------------------------------- // @@ -420,326 +169,272 @@ { iRestrictedDialer = aRestricted; } -// --------------------------------------------------------------------------- -// UpdateToolbar -// --------------------------------------------------------------------------- -// -void CPhoneDialerController::UpdateToolbar() - { - - TPhoneCmdParamInteger numberEntryCountParam; - iBubbleWrapper.GetNumberEntryCount( - (TPhoneCommandParam*) &numberEntryCountParam ); - TInt neLength( numberEntryCountParam.Integer() ); - - if ( neLength ) - { - CreateButtonSetNumberEntryNotEmpty(); - iToolbar->SetItemDimmed( EPhoneDialerCmdClear, EFalse, EFalse ); - iToolbar->DrawDeferred(); - - //Update also options menu via controller - iMenuController.SetNumberEntryEmptyFlag( EFalse ); - } - - else - { - CreateButtonSetNumberEntryEmpty(); - iToolbar->SetItemDimmed( EPhoneDialerCmdClear, ETrue, EFalse ); - iToolbar->DrawDeferred(); - - //Update also options menu via controller - iMenuController.SetNumberEntryEmptyFlag( ETrue ); - } - } - -// --------------------------------------------------------------------------- -// OfferToolbarEventL -// --------------------------------------------------------------------------- -// -void CPhoneDialerController::OfferToolbarEventL( TInt aCommand ) - { - switch ( aCommand ) - { - case EPhoneDialerCmdClear: - { - // Send key event. - TKeyEvent keyEvent; - keyEvent.iModifiers = 0; - keyEvent.iRepeats = 0; - keyEvent.iCode = EKeyBackspace; - keyEvent.iScanCode = EStdKeyBackspace; - iCoeEnv.SimulateKeyEventL( keyEvent, EEventKey ); - } - break; - default: - { - // Forward pressed toolbar button to the framework - // so that we can handle it in active state - static_cast( CEikonEnv::Static()->EikAppUi() ) - ->ProcessCommandL( aCommand ); - } - break; - } - } - -// --------------------------------------------------------------------------- -// DynInitToolbarL -// --------------------------------------------------------------------------- -// -void CPhoneDialerController::DynInitToolbarL( TInt aResourceId, - CAknToolbar* /*aToolbar*/ ) - { - if ( aResourceId == R_PHONEUI_TOOLBAR ) - { - if ( !iDtmfDialerVisible ) - { - UpdateToolbar(); - } - else - { - // initialize toolbar for dtmf dialer - // - // Show - iToolbar->HideItem( EPhoneCmdDtmfOk, EFalse, EFalse ); - iToolbar->HideItem( EPhoneDialerCmdContacts, EFalse, EFalse ); - - // Hide - iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, ETrue, EFalse ); - iToolbar->HideItem( EPhoneDialerCmdLog, ETrue, EFalse ); - iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, ETrue - , EFalse ); - - // Dimming - iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, ETrue, EFalse ); - iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, ETrue, EFalse ); - } - } - } -// --------------------------------------------------------------------------- -// IsDTMFDialerVisible -// --------------------------------------------------------------------------- -// -TBool CPhoneDialerController::IsDTMFDialerVisible() const - { - return iDtmfDialerVisible; - } - - -// --------------------------------------------------------------------------- -// GetTooltipText -// -// Tooltip texts for toolbar buttons -// --------------------------------------------------------------------------- -// -void CPhoneDialerController::GetTooltipTextL( TInt aCommandId, HBufC*& aText ) - { - TInt resourceId = 0; - switch( aCommandId ) - { - case EPhoneDialerCmdLog: - resourceId = R_PHONEUI_DIALER_TOOLTIP_RECENT_CALLS; - break; - - case EPhoneNumberAcqCmdSendCommand: - resourceId = R_PHONEUI_DIALER_TOOLTIP_CALL; - break; - - case EPhoneCmdDtmfOk: - resourceId = R_PHONEUI_DIALER_TOOLTIP_SEND; - break; - - case EPhoneDialerCmdContacts: - resourceId = R_PHONEUI_DIALER_TOOLTIP_CONTACTS; - break; - - case EPhoneNumberAcqCmdAddToContacts: - resourceId = R_PHONEUI_DIALER_TOOLTIP_ADD_TO_CONTACTS; - break; - - case EPhoneDialerCmdClear: - resourceId = R_PHONEUI_DIALER_TOOLTIP_CLEAR; - break; - default: - aText = KNullDesC().Alloc(); - break; - } - - if( resourceId ) - { - aText = StringLoader::LoadL( resourceId, &iCoeEnv ); - } - - } // --------------------------------------------------------------------------- // SetServiceCodeFlagL // -// Change call button tooltip text between 'Send' or 'Call' +// The flag rules wether green key is called "Send" or "Call" // // --------------------------------------------------------------------------- // -void CPhoneDialerController::SetServiceCodeFlagL( +void CPhoneDialerController::SetServiceCodeFlag( TPhoneCommandParam* aCommandParam ) { - // Check is the given parameter valid if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean ) - { - TInt resourceId = 0; + { TPhoneCmdParamBoolean* serviceCodeFlag = static_cast( aCommandParam ); - // Sanity check - if( serviceCodeFlag->Boolean() == iServiceCodeFlag ) - { - return; - } - // Get the toolbar button control - CAknButton* button = static_cast - ( iToolbar->ControlOrNull( EPhoneNumberAcqCmdSendCommand) ); - - CAknButtonState* state = button->State(); - if ( serviceCodeFlag->Boolean() ) - { - iServiceCodeFlag = ETrue; - resourceId = R_PHONEUI_DIALER_TOOLTIP_SEND; - } - else - { - iServiceCodeFlag = EFalse; - resourceId = R_PHONEUI_DIALER_TOOLTIP_CALL; - } - - if( resourceId ) - { - // Change text - HBufC* tooltipText = StringLoader::LoadL( resourceId, - CCoeEnv::Static() ); - CleanupStack::PushL( tooltipText ); - state->SetHelpTextL( *tooltipText ); - CleanupStack::PopAndDestroy( tooltipText ); - } + iServiceCodeFlag = serviceCodeFlag->Boolean(); } } // --------------------------------------------------------------------------- -// ShowToolbar +// SetEasyDialingController +// --------------------------------------------------------------------------- // +void CPhoneDialerController::SetEasyDialingController( + CPhoneEasyDialingController* aController ) + { + iEasyDialingController = aController; + } + +// --------------------------------------------------------------------------- +// CbaResourceId // --------------------------------------------------------------------------- // -void CPhoneDialerController::ShowToolbar() +EXPORT_C TInt CPhoneDialerController::CbaResourceId() const + { + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// MenuResourceId +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CPhoneDialerController::MenuResourceId() const { - if ( iToolbar ) - { - if ( iToolbar->IsToolbarDisabled() ) - { - TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse )); - } - iToolbar->HideItemsAndDrawOnlyBackground( EFalse ); - iToolbar->SetToolbarVisibility( ETrue, EFalse ); - } + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// NumberEntryPromptTextL +// --------------------------------------------------------------------------- +// +EXPORT_C const TDesC& CPhoneDialerController::NumberEntryPromptTextL() + { + return KNullDesC; } // --------------------------------------------------------------------------- -// HideToolbar -// +// GetButtonData // --------------------------------------------------------------------------- // -void CPhoneDialerController::HideToolbar() +EXPORT_C TInt CPhoneDialerController::GetButtonData( TButtonIndex aIndex, + RPointerArray& aData ) const { - if ( iToolbar ) + TInt err = KErrNone; + + const TLocalButtonData* dataTable = NULL; + TInt count = 0; + + // Select correct data table + switch ( aIndex ) { - if( iToolbar->IsShown() ) + case ECallButton: + dataTable = KCallButtonDataTable; + count = KCallButtonDataTableCount; + break; + case EPhonebookButton: + dataTable = KPhonebookButtonDataTable; + count = KPhonebookButtonDataTableCount; + break; + case EClearButton: + dataTable = KClearButtonDataTable; + count = KClearButtonDataTableCount; + break; + default: + break; + } + + // Create data from the table + if ( dataTable ) + { + // Construct MIF file path + TFileName mifPath( KDriveZ ); + mifPath.Append( KDC_APP_BITMAP_DIR ); + mifPath.Append( KPhoneMifFileName ); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + for ( TInt i = 0 ; i < count ; ++i ) { - iToolbar->HideItemsAndDrawOnlyBackground( ETrue ); + CButtonData* btnData = NULL; + TRAP( err, btnData = CreateButtonDataL( dataTable[i], skin, mifPath ) ); + if ( !err ) + { + err = aData.Append( btnData ); + } + if ( err ) + { + // free all memory and stop here if something went wrong + delete btnData; + aData.ResetAndDestroy(); + i = count; + } } - else if ( iToolbar->IsToolbarDisabled() ) - { - TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse )); - iToolbar->HideItemsAndDrawOnlyBackground( ETrue ); - iToolbar->SetToolbarVisibility( ETrue, EFalse ); - } - } + } + return err; + } + +// --------------------------------------------------------------------------- +// SetNumberEntryEmptyIsEmpty +// --------------------------------------------------------------------------- +// +EXPORT_C void CPhoneDialerController::SetNumberEntryIsEmpty( TBool aEmpty ) + { + iNumberAvailable = !aEmpty; } // --------------------------------------------------------------------------- -// ShowCustomizedDialerL -// -// Sets custom dialer buttons visible -// +// ButtonState // --------------------------------------------------------------------------- // -void CPhoneDialerController::ShowCustomizedDialerL( - MPhoneDialerController* aCustomController ) - { - if ( aCustomController ) +EXPORT_C TInt CPhoneDialerController::ButtonState( TButtonIndex aIndex ) const + { + TInt state = 0; + // Figure out correct state for each key + switch ( aIndex ) { - // Hide all buttons except clear button - for ( TInt i = 0; i < KNumberOfButtons; i++ ) + case ECallButton: { - if ( bArray[ i ].iCommandId != EPhoneDialerCmdClear ) + state = ECallButtonCallStateIndex; + if ( !iNumberAvailable ) + { + state = ECallButtonLogStateIndex; + } + else if ( iServiceCodeFlag ) { - iToolbar->HideItem( bArray[ i ].iCommandId, ETrue, EFalse ); + // Set "Send" state unless Easy dialing is focused + TBool edFocused = EFalse; + if ( iEasyDialingController ) + { + TInt commandResponse( EPhoneViewResponseFailed ); + TRAP_IGNORE( commandResponse = iEasyDialingController->HandleCommandL( + EPhoneViewGetEasyDialingInFocusStatus) ); + edFocused = ( commandResponse == EPhoneViewResponseSuccess ); + } + if ( !edFocused ) + { + state = ECallButtonSendStateIndex; + } } } - - aCustomController->InitializeL( *iToolbar ); - iBubbleWrapper.SetNumberEntryPromptText( - aCustomController->NumberEntryPromptTextL() ); - aCustomController->ShowButtons( ETrue ); + break; + case EPhonebookButton: + { + if ( !iNumberAvailable ) + { + state = EPhonebookButtonContactsIndex; + } + else + { + state = EPhonebookButtonAddContactIndex; + } + } + break; + case EClearButton: + { + state = EClearButtonClearIndex; + } + break; + default: + break; } - iCustomizedDialer = aCustomController; + return state; } // --------------------------------------------------------------------------- -// HideCustomizedDialerL -// -// Hides custom dialer buttons -// +// ButtonDimmed // --------------------------------------------------------------------------- // -void CPhoneDialerController::HideCustomizedDialer() - { - iCustomizedDialer->ShowButtons( EFalse ); - iBubbleWrapper.SetNumberEntryPromptText( KNullDesC ); - iCustomizedDialer = NULL; +EXPORT_C TBool CPhoneDialerController::ButtonDimmed( TButtonIndex aIndex ) const + { + TBool dimmed = EFalse; + // Figure out correct state for each key + switch ( aIndex ) + { + case ECallButton: + dimmed = iRestrictedDialer; + if ( !dimmed ) + { + // Prevent calling but don't prevent log during emergency call + dimmed = ( iNumberAvailable && EmergencyCallActive() ); + } + break; + case EPhonebookButton: + dimmed = iRestrictedDialer; + break; + case EClearButton: + dimmed = !iNumberAvailable; + break; + default: + break; + } + return dimmed; } // --------------------------------------------------------------------------- -// IsCustomizedDialerVisible +// EasyDialingAllowed // --------------------------------------------------------------------------- // -TBool CPhoneDialerController::IsCustomizedDialerVisible() const +EXPORT_C TBool CPhoneDialerController::EasyDialingAllowed() const { - return ( NULL != iCustomizedDialer ); + return !iRestrictedDialer && !EmergencyCallActive(); } // --------------------------------------------------------------------------- -// CustomizedCbaResourceId +// EmergencyCallActive // --------------------------------------------------------------------------- // -TInt CPhoneDialerController::CustomizedCbaResourceId() const +EXPORT_C TBool CPhoneDialerController::EmergencyCallActive() const { - TInt resourceId = KErrNotFound; - if ( iCustomizedDialer ) + TBool ret = EFalse; + if ( iBubbleWrapper ) { - resourceId = iCustomizedDialer->CbaResourceId(); + TPhoneCmdParamCallStateData callStateData; + callStateData.SetCallState( EPEStateConnected ); + iBubbleWrapper->GetCallIdByState( &callStateData ); + TInt connected = callStateData.CallId(); + ret = ( connected == KEmergencyCallId ); } - return resourceId; + return ret; } // --------------------------------------------------------------------------- -// CustomizedMenuResourceId +// CreateButtonDataL // --------------------------------------------------------------------------- // -TInt CPhoneDialerController::CustomizedMenuResourceId() const +MPhoneDialerController::CButtonData* CPhoneDialerController::CreateButtonDataL( + const TLocalButtonData& aSourceData, + MAknsSkinInstance* aSkin, + const TDesC& aMifFile ) const { - TInt resourceId = KErrNotFound; - if ( iCustomizedDialer ) - { - resourceId = iCustomizedDialer->MenuResourceId(); - } - return resourceId; + // Create tooltip text + HBufC* tooltip = StringLoader::LoadLC( aSourceData.iTooltipResourceId ); + + // Create icon + TAknsItemID skinId = { EAknsMajorGeneric, aSourceData.iSkinItemIdMinor }; + CGulIcon* icon = AknsUtils::CreateGulIconL( aSkin, skinId, aMifFile, + aSourceData.iBitmapIndex, aSourceData.iBitmapMaskIndex ); + CleanupStack::PushL( icon ); + + // Create button data object + CButtonData* buttonData = + new ( ELeave ) CButtonData( aSourceData.iCommandId, icon, tooltip ); + CleanupStack::Pop( icon ); + CleanupStack::Pop( tooltip ); + + return buttonData; } // END diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphonedialerview.cpp --- a/phoneapp/phoneuiview/src/cphonedialerview.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/src/cphonedialerview.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2008 - 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" @@ -57,9 +57,6 @@ EPhoneBgLayersN = 1 }; -#define LSC_VARIETY 0 -#define PRT_VARIETY 6 - // ================= MEMBER FUNCTIONS ======================= // ----------------------------------------------------------------------------- @@ -88,7 +85,7 @@ CreateWindowL(); DrawableWindow()->SetPointerGrab( ETrue ); - SetRect( aRect ); + SetComponentsToInheritVisibility( ETrue ); } // ----------------------------------------------------------------------------- @@ -214,78 +211,25 @@ // CPhoneDialerView::SetRect // ----------------------------------------------------------------------------- // -void CPhoneDialerView::SetRect( const TRect &aRect ) +void CPhoneDialerView::SetRect( const TRect& aRect ) { - __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::SetRect()"); - if ( !AknLayoutUtils::PenEnabled() ) - { - CCoeControl::SetRect( aRect ); - } - else + CCoeControl::SetRect( aRect ); + iControlRect = Rect(); + // Forward size change to the control only if we are visible. Otherwise the + // control rect is just srored and relayed to control when we do become + // visible. This way we can avoid unnecessary relayout work for example when + // status bar size changes or screen is rotated while in-call ui is active. + if ( IsVisible() ) { - if ( iSecurityMode ) - { - // In security mode aRect is ok. - CCoeControl::SetRect( aRect ); - iControlRect = Rect(); - } - else - { - TAknLayoutRect viewRect; - - TRect screenRect; - AknLayoutUtils::LayoutMetricsRect( - AknLayoutUtils::EScreen, - screenRect ); - - // dialer view - viewRect.LayoutRect( - screenRect, - TAknWindowComponentLayout::Compose( - AknLayoutScalable_Avkon::application_window( 0 ), - AknLayoutScalable_Avkon::main_pane( 7 ) ) ); - - CCoeControl::SetRect( viewRect.Rect() ); - - TInt variety ( PRT_VARIETY ) ; // portrait - if ( Layout_Meta_Data::IsLandscapeOrientation() ) - { - variety = LSC_VARIETY; - } - - // reduce toolbar - TAknLayoutRect toolbarRect; - toolbarRect.LayoutRect( - screenRect, - TAknWindowComponentLayout::Compose( - AknLayoutScalable_Avkon::application_window( 0 ), - AknLayoutScalable_Avkon::area_side_right_pane( variety ) ) ); - - if ( toolbarRect.Rect().Intersects( viewRect.Rect() ) ) - { - iControlRect = Rect(); - if ( variety == PRT_VARIETY ) // portrait - { - iControlRect.iBr.iY -= toolbarRect.Rect().Height(); - } - else - { - iControlRect.iBr.iX -= toolbarRect.Rect().Width(); - } - } - else - { - iControlRect = Rect(); - } - } - } + UpdateControlRect(); + } } // ----------------------------------------------------------------------------- // CPhoneDialerView::Draw // ----------------------------------------------------------------------------- // -void CPhoneDialerView::Draw( const TRect& aRect ) const +void CPhoneDialerView::Draw( const TRect& aRect ) const { __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::Draw()"); TRect rect = Rect(); @@ -343,8 +287,6 @@ iBgContext->SetLayerImage( EPhoneBgFirstLayer, KAknsIIDQsnBgScreen ); iBgContext->SetParentPos( screen.iTl ); iBgContext->SetLayerRect( EPhoneBgFirstLayer, screen ) ; - - UpdateControlRect(); } // ----------------------------------------------------------------------------- @@ -387,7 +329,7 @@ if ( iControlRect != iControl->Rect() ) { iControl->SetRect( iControlRect ); - } + } } } } @@ -408,6 +350,22 @@ } // ----------------------------------------------------------------------------- +// CPhoneDialerView::MakeVisible +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::MakeVisible( TBool aVisible ) + { + if ( aVisible ) + { + // Deferred control rect size update before view becomes visible. + // We don't relay size changes to our control while view is invisible + // to avoid unnecessary layout recalculations. + UpdateControlRect(); + } + CCoeControl::MakeVisible( aVisible ); + } + +// ----------------------------------------------------------------------------- // CPhoneDialerView::SetSecurityMode // ----------------------------------------------------------------------------- // diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphonedtmfdialercontroller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiview/src/cphonedtmfdialercontroller.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,208 @@ +/* +* Copyright (c) 2009 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: Controller for DTMF mode of Dialer +* +*/ + +#include +#include +#include +#include +#include +#include "phoneappcommands.hrh" +#include "cphonedtmfdialercontroller.h" +#include "cphonemainresourceresolver.h" +#include "phonerssbase.h" + +_LIT ( KPhoneMifFileName, "phoneui.mif" ); + +const CPhoneDialerController::TLocalButtonData KSendDtmfButtonData = + { + EPhoneCmdDtmfOk, + EAknsMinorGenericQgnIndiButtonSendDtmf, + EMbmPhoneuiQgn_indi_button_send_dtmf, + EMbmPhoneuiQgn_indi_button_send_dtmf_mask, + R_PHONEUI_DIALER_TOOLTIP_SEND + }; + +// --------------------------------------------------------------------------- +// CPhoneDtmfDialerController +// --------------------------------------------------------------------------- +// +CPhoneDtmfDialerController::CPhoneDtmfDialerController( + CPhoneBubbleWrapper* aBubbleWrapper, + CCoeEnv& aCoeEnv ) : + CPhoneDialerController( aBubbleWrapper, aCoeEnv ) + { + // No implementation required + } + +// --------------------------------------------------------------------------- +// ~CPhoneDtmfDialerController +// --------------------------------------------------------------------------- +// +CPhoneDtmfDialerController::~CPhoneDtmfDialerController() + { + delete iPromptText; + } + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CPhoneDtmfDialerController* CPhoneDtmfDialerController::NewLC( + CPhoneBubbleWrapper* aBubbleWrapper, + CCoeEnv& aCoeEnv ) + { + CPhoneDtmfDialerController* self = + new (ELeave) CPhoneDtmfDialerController( aBubbleWrapper, aCoeEnv ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CPhoneDtmfDialerController* CPhoneDtmfDialerController::NewL( + CPhoneBubbleWrapper* aBubbleWrapper, + CCoeEnv& aCoeEnv ) + { + CPhoneDtmfDialerController* self = + CPhoneDtmfDialerController::NewLC( aBubbleWrapper, aCoeEnv ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CPhoneDtmfDialerController::ConstructL() + { + CPhoneDialerController::ConstructL(); + } + +// --------------------------------------------------------------------------- +// NumberEntryPromptTextL +// --------------------------------------------------------------------------- +// +const TDesC& CPhoneDtmfDialerController::NumberEntryPromptTextL() + { + if ( !iPromptText ) + { + // Load prompt text when it's needed for the first time. + // It can't be loaded in constructor as resource resolver + // is not yet properly set up at that time. + TInt resourceId = + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneDtmfDialerNumberEntryPromptText ); + iPromptText = StringLoader::LoadL( resourceId, &iCoeEnv ); + } + if ( iPromptText ) + { + return *iPromptText; + } + return KNullDesC; + } + +// --------------------------------------------------------------------------- +// GetButtonDataL +// --------------------------------------------------------------------------- +// +TInt CPhoneDtmfDialerController::GetButtonData( TButtonIndex aIndex, RPointerArray& aData ) const + { + TInt err = KErrNone; + + if ( aIndex == ECallButton ) + { + TFileName mifPath( KDriveZ ); + mifPath.Append( KDC_APP_BITMAP_DIR ); + mifPath.Append( KPhoneMifFileName ); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + CButtonData* btnData = NULL; + TRAP( err, btnData = CreateButtonDataL( KSendDtmfButtonData, skin, mifPath ) ); + if ( !err ) + { + err = aData.Append( btnData ); + if ( err ) + { + // append failed, delete created data to avoid memory leak + delete btnData; + } + } + } + else if ( aIndex == EClearButton ) + { + // let base class handle backspace + err = CPhoneDialerController::GetButtonData( aIndex, aData ); + } + else + { + // leave Phonebook button empty + } + return err; + } + +// --------------------------------------------------------------------------- +// ButtonState +// --------------------------------------------------------------------------- +// +TInt CPhoneDtmfDialerController::ButtonState( TButtonIndex aIndex ) const + { + TInt state = KErrNotFound; + // Call button has one only one state, phonebook button has no states. + // Clear button is handled by the base class. + if ( aIndex == ECallButton ) + { + state = 0; + } + else if ( aIndex == EClearButton ) + { + state = CPhoneDialerController::ButtonState( aIndex ); + } + return state; + } + +// --------------------------------------------------------------------------- +// GetButtonDimmed +// --------------------------------------------------------------------------- +// +TBool CPhoneDtmfDialerController::ButtonDimmed( TButtonIndex aIndex ) const + { + TBool dimmed = ETrue; + // Call button is dimmed while number entry is empty. Phonebook button + // is empty and always dimmed. Clear button is handled by the base class. + if ( aIndex == ECallButton ) + { + dimmed = !iNumberAvailable; + } + else if ( aIndex == EClearButton ) + { + dimmed = CPhoneDialerController::ButtonDimmed( EClearButton ); + } + return dimmed; + } + +// --------------------------------------------------------------------------- +// EasyDialingAllowed +// --------------------------------------------------------------------------- +// +TBool CPhoneDtmfDialerController::EasyDialingAllowed() const + { + return EFalse; + } + +// end of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphoneeasydialingcontroller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiview/src/cphoneeasydialingcontroller.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,153 @@ +/* +* Copyright (c) 2009 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: Class handles Easy dialing specific commands +* +*/ + +#include "cphoneeasydialingcontroller.h" + +#include "cdialer.h" +#include "tphonecommandparam.h" +#include "tphonecmdparaminteger.h" +#include "tphonecmdparamdynmenu.h" +#include "dialingextensioninterface.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CPhoneEasyDialingController::CPhoneEasyDialingController +// --------------------------------------------------------------------------- +// +CPhoneEasyDialingController::CPhoneEasyDialingController( + CDialer& aDialer ) + : iDialer ( aDialer ) + { + // Get Easydialing interface. This can be NULL if easydialing is not + // present in current device configuration. + iEasyDialing = iDialer.GetEasyDialingInterface(); + } + + // --------------------------------------------------------------------------- + // CPhoneEasyDialingController::NewL + // --------------------------------------------------------------------------- + // +CPhoneEasyDialingController* CPhoneEasyDialingController::NewL( + CDialer& aDialer ) + { + return new (ELeave) CPhoneEasyDialingController( aDialer ); + } + +// --------------------------------------------------------------------------- +// CPhoneEasyDialingController::~CPhoneEasyDialingController +// --------------------------------------------------------------------------- +// +CPhoneEasyDialingController::~CPhoneEasyDialingController() + { + } + +// --------------------------------------------------------------------------- +// CPhoneEasyDialingController::ExecuteCommandL +// --------------------------------------------------------------------------- +// +void CPhoneEasyDialingController::ExecuteCommandL( + TPhoneViewCommandId aCmdId, + TPhoneCommandParam* aCommandParam ) + { + if ( iEasyDialing ) + { + switch ( aCmdId ) + { + case EPhoneViewGetEasyDialingMenuId: + { + TPhoneCmdParamInteger* paramInt = + static_cast( aCommandParam ); + paramInt->SetInteger( iEasyDialing->MenuResourceId() ); + } + break; + + case EPhoneViewGetEasyDialingCbaId: + { + TPhoneCmdParamInteger* paramInt = + static_cast( aCommandParam ); + paramInt->SetInteger( iEasyDialing->CbaResourceId() ); + } + break; + + default: + break; + } + } + } + +// --------------------------------------------------------------------------- +// CPhoneEasyDialingController::HandleCommandL +// --------------------------------------------------------------------------- +// +TPhoneViewResponseId CPhoneEasyDialingController::HandleCommandL( + TPhoneViewCommandId aCmdId ) + { + TPhoneViewResponseId viewResponse = EPhoneViewResponseFailed; + + switch ( aCmdId ) + { + // commands defined in easydialingcommands.hrh are forwarded to + // easydialing plugin + case EEasyDialingVoiceCall: + case EEasyDialingVideoCall: + case EEasyDialingSendMessage: + case EEasyDialingOpenContact: + case EEasyDialingCallHandlingActivated: + case EEasyDialingEnterKeyAction: + case EEasyDialingOn: + case EEasyDialingOff: + { + if( iEasyDialing && iEasyDialing->HandleCommandL( aCmdId ) ) + { + viewResponse = EPhoneViewResponseSuccess; + } + } + break; + + case EPhoneViewGetEasyDialingInFocusStatus: + { + if ( iEasyDialing && iEasyDialing->IsFocused() ) + { + viewResponse = EPhoneViewResponseSuccess; + } + } + break; + } + + return viewResponse; + } + +// --------------------------------------------------------------------------- +// CPhoneEasyDialingController::InitializeEasyDialingMenuL +// --------------------------------------------------------------------------- +// +TBool CPhoneEasyDialingController::InitializeEasyDialingMenuL( + TPhoneCommandParam* aCommandParam ) + { + TBool retVal( EFalse ); + if ( iEasyDialing ) + { + TPhoneCmdParamDynMenu* menu = static_cast( aCommandParam ); + + // TInt resourceId = menu->ResourceId(); + CEikMenuPane* menuPane = reinterpret_cast( menu->DynMenu() ); + + retVal = iEasyDialing->InitializeMenuPaneL( *menuPane, menu->ResourceId() ); + } + return retVal; + } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphonemenucontroller.cpp --- a/phoneapp/phoneuiview/src/cphonemenucontroller.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/src/cphonemenucontroller.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -254,6 +254,10 @@ { menuPane->DeleteMenuItem( menuItemArray[ i ] ); } + else if ( iInvalidCsPhoneNumber ) + { + menuPane->DeleteMenuItem( menuItemArray[ i ] ); + } break; case EPhoneNumberAcqCmdVideoCall: @@ -268,10 +272,14 @@ { menuPane->DeleteMenuItem( menuItemArray[ i ] ); } + else if ( iInvalidCsPhoneNumber ) + { + menuPane->DeleteMenuItem( menuItemArray[ i ] ); + } break; case EPhoneNumberAcqCmdSendMessage: - if ( iNumberEntryEmpty ) + if ( iNumberEntryEmpty || iInvalidCsPhoneNumber ) { menuPane->DeleteMenuItem( menuItemArray[ i ] ); } @@ -473,7 +481,7 @@ case EPhoneNumberAcqCmdAddToContacts: { - if ( onScreenDialer && iNumberEntryEmpty ) + if ( onScreenDialer && iNumberEntryEmpty ) { menuPane->DeleteMenuItem( menuItemArray[i] ); } @@ -522,6 +530,15 @@ } break; + case EEasyDialingSettingsItemPlaceHolder: + { + if( !FeatureManager::FeatureSupported( KFeatureIdProductIncludesHomeScreenEasyDialing ) ) + { + menuPane->DeleteMenuItem( menuItemArray[i] ); + } + } + break; + default: break; @@ -1058,5 +1075,52 @@ } } - +// --------------------------------------------------------- +// CPhoneMenuController::SetInvalidCsPhoneNumberFlag +// --------------------------------------------------------- +// +void CPhoneMenuController::SetInvalidCsPhoneNumberFlag( TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneMenuController::SetInvalidCsPhoneNumberFlag()" ); + if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean ) + { + TPhoneCmdParamBoolean* boolParam = + static_cast( aCommandParam ); + + __PHONELOG1( + EBasic, + EPhonePhoneapp, + "CPhoneMenuController::SetInvalidCsPhoneNumberFlag() - Boolean parameter = %d)", + boolParam->Boolean() ); + + iInvalidCsPhoneNumber = boolParam->Boolean(); + } + } + +// --------------------------------------------------------- +// CPhoneMenuController::GetInvalidCsPhoneNumberFlag +// --------------------------------------------------------- +// +void CPhoneMenuController::GetInvalidCsPhoneNumberFlag( + TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND( + EPhoneUIView, + "CPhoneMenuController::GetInvalidCsPhoneNumberFlag()" ); + + if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean ) + { + TPhoneCmdParamBoolean* boolParam = + static_cast( aCommandParam ); + + __PHONELOG1( + EBasic, + EPhonePhoneapp, + "CPhoneMenuController::GetInvalidCsPhoneNumberFlag() - Boolean return value = %d)", + boolParam->Boolean() ); + + boolParam->SetBoolean( iInvalidCsPhoneNumber ); + } + } + // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphoneringingtoneplayerao.cpp --- a/phoneapp/phoneuiview/src/cphoneringingtoneplayerao.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/src/cphoneringingtoneplayerao.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -377,8 +377,9 @@ { __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::MuteRingingToneOnAnswer()" ); - if ( iVideoPlayer && iTonePlayingStatus == EVideoTonePlaying || - iTonePlayingStatus == EPersonalVideoTonePlaying ) + if ( iVideoPlayer && + ( iTonePlayingStatus == EVideoTonePlaying || + iTonePlayingStatus == EPersonalVideoTonePlaying ) ) { // Mute the video audio iVideoPlayer->MuteVideoRingTone(); @@ -399,8 +400,9 @@ { __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneRingingTonePlayerAO::MuteRingingTone()" ); - if ( iVideoPlayer && iTonePlayingStatus == EVideoTonePlaying || - iTonePlayingStatus == EPersonalVideoTonePlaying ) + if ( iVideoPlayer && + ( iTonePlayingStatus == EVideoTonePlaying || + iTonePlayingStatus == EPersonalVideoTonePlaying ) ) { // Mute the video audio iVideoPlayer->MuteVideoRingTone(); @@ -1631,7 +1633,7 @@ ramptime ); currPlayer->SetNewVolumeAndRamptime( iTtsVolume, 0 ); } - break; + break; case ESaidTwice: if ( iTtsRingingType == EProfileRingingTypeAscending ) @@ -1814,42 +1816,42 @@ switch( iTonePlayingStatus ) { case EAudioTonePlaying: - if( iAudioPlayer != NULL ) + if( iAudioPlayer ) { return iAudioPlayer; } break; case EDefaultTonePlaying: - if ( iDefaultPlayer != NULL ) + if ( iDefaultPlayer ) { return iDefaultPlayer; } break; case EBeepOnce: - if( iBeepOncePlayer != NULL ) + if( iBeepOncePlayer ) { return iBeepOncePlayer; } break; case EBackupTonePlaying: - if( iBackupPlayer != NULL ) + if( iBackupPlayer ) { return iBackupPlayer; } break; case ESilentTonePlaying: - if( iSilentPlayer != NULL ) + if( iSilentPlayer ) { return iSilentPlayer; } break; case EUnsecureVoIPTonePlaying: - if( iUnsecureVoIPTonePlayer != NULL ) + if( iUnsecureVoIPTonePlayer ) { return iUnsecureVoIPTonePlayer; } @@ -1858,11 +1860,11 @@ case EVideoTonePlaying: // video ringing tone case EPersonalVideoTonePlaying: case ESilentVideoTonePlaying: - if ( iBeepOncePlayer != NULL ) + if ( iBeepOncePlayer ) { return iBeepOncePlayer; } - else if ( iSilentPlayer != NULL ) + else if ( iSilentPlayer ) { return iSilentPlayer; } @@ -1888,7 +1890,7 @@ case EVideoTonePlaying: // video ringing tone, fall through case EPersonalVideoTonePlaying: // fall through case ESilentVideoTonePlaying: - if ( iVideoPlayer != NULL ) + if ( iVideoPlayer ) { iVideoPlayer->MuteVideoRingTone(); return; @@ -1900,7 +1902,7 @@ } CPhoneAudioPlayer* activePlayer = ActiveAudioPlayer(); - if( activePlayer != NULL ) + if( activePlayer ) { activePlayer->MutePlaying(); } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphonestatuspane.cpp --- a/phoneapp/phoneuiview/src/cphonestatuspane.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/src/cphonestatuspane.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -45,7 +45,7 @@ #include "tphonecmdparambitmap.h" #include "phonelogger.h" -#include +#include // CONSTANTS diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphonetoolbarcontroller.cpp --- a/phoneapp/phoneuiview/src/cphonetoolbarcontroller.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/src/cphonetoolbarcontroller.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007 - 2009 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" @@ -31,11 +31,11 @@ #include #include "cphonetoolbarcontroller.h" -#include "PhoneUI.hrh" -#include "PhoneRssBase.h" -#include "TPhoneCmdParamInteger.h" -#include "TPhoneCmdParamBoolean.h" -#include "PhoneLogger.h" +#include "phoneui.hrh" +#include "phonerssbase.h" +#include "tphonecmdparaminteger.h" +#include "tphonecmdparamboolean.h" +#include "phonelogger.h" _LIT ( KPhoneMifFileName, "phoneui.mif" ); @@ -303,6 +303,8 @@ } return skinId; } + +// --------------------------------------------------------------------------- // ShowToolbar // // --------------------------------------------------------------------------- @@ -310,6 +312,7 @@ void CPhoneToolbarController::ShowToolbar() { __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::ShowToolbar()" ); + if ( iToolbar ) { if ( iToolbar->IsToolbarDisabled() ) @@ -317,7 +320,6 @@ TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse )); } UpdateToolbar(); - iToolbar->HideItemsAndDrawOnlyBackground( EFalse ); iToolbar->SetToolbarVisibility( ETrue, EFalse ); } } @@ -332,17 +334,12 @@ __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::HideToolbar()" ); if ( iToolbar ) { - if( iToolbar->IsShown() ) - { - iToolbar->HideItemsAndDrawOnlyBackground( ETrue ); - } - else if ( iToolbar->IsToolbarDisabled() ) + if ( iToolbar->IsToolbarDisabled() ) { TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse )); - iToolbar->HideItemsAndDrawOnlyBackground( ETrue ); - iToolbar->SetToolbarVisibility( ETrue, EFalse ); } - } + iToolbar->SetToolbarVisibility( EFalse, EFalse ); + } } // --------------------------------------------------------- diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphoneview.cpp --- a/phoneapp/phoneuiview/src/cphoneview.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/src/cphoneview.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -49,7 +49,7 @@ #include #include #include -#include +#include enum TPhoneBgLayers { diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuiview/src/cphoneviewcontroller.cpp --- a/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005 - 2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -23,6 +23,8 @@ #include "cphonetoolbarcontroller.h" #include "cphonebuttonscontroller.h" #include "cphonedialercontroller.h" +#include "cphoneeasydialingcontroller.h" +#include "cphonedtmfdialercontroller.h" #include "cphonemenucontroller.h" #include "cphonenotecontroller.h" #include "cphonequerycontroller.h" @@ -106,7 +108,7 @@ #include #include #include -#include +#include #include #include #include @@ -128,7 +130,9 @@ #include #include -#include // Call Settings launch. +#include // Call Settings launch. + +#include // Kastor effect IDs, aknskincontent/101f84b9.sel const TInt KTouchDialerOpenEffect = 1505; @@ -209,32 +213,40 @@ iEikEnv.WsSession(), iEikEnv.WsSession().FindWindowGroupIdentifier( 0, KPhoneEikonServer ) ); + CCoeEnv* coeEnv = CCoeEnv::Static(); + if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) { iButtonsController = CPhoneButtonsController::NewL( iBubbleWrapper->TouchPane() ); + iToolbarController = CPhoneToolbarController::NewL( *coeEnv ); } if ( FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) ) { + iDialerActive = EFalse; + // Create dialer controller + iDialerController = CPhoneDialerController::NewL( iBubbleWrapper, + *coeEnv ); // Create dialer view iDialerView = CPhoneDialerView::NewL( aRect ); iDialerView->DrawableWindow()->SetOrdinalPosition( -1 ); iDialerView->MakeVisible( EFalse ); // Create dialer - iDialer = CDialer::NewL( *iDialerView, aRect ); + iDialer = CDialer::NewL( *iDialerView, aRect, iDialerController ); // Set NE for bubbleWrapper iBubbleWrapper->SetNumberEntry( iDialer->NumberEntry() ); - CCoeEnv* coeEnv = static_cast(iDialer)->ControlEnv(); - iDialerController = CPhoneDialerController::NewL( *iBubbleWrapper, - *coeEnv, - *iMenuController ); + iBubbleWrapper->SetNumberEntryObserver( *this ); + // Finalise dialer view + iDialerView->SetControl( iDialer ); + iDialerView->ActivateL(); - iToolbarController = CPhoneToolbarController::NewL( *coeEnv ); - - - iDialerView->SetControl( iDialer ); - iDialerView->ActivateL(); - iDialerActive = EFalse; + // Create controller for Easy Dialing + iEasyDialingController = CPhoneEasyDialingController::NewL( *iDialer ); + iDialerController->SetEasyDialingController( iEasyDialingController ); + + // Create controller for DTMF mode of the dialer + iDtmfDialerController = CPhoneDtmfDialerController::NewL( iBubbleWrapper, + *coeEnv ); } User::LeaveIfError( iKeyLock.Connect() ); @@ -298,6 +310,10 @@ } delete iDialerView; } + + delete iEasyDialingController; + delete iDtmfDialerController; + delete iDialer; if ( iSingleItemFetch ) { @@ -542,7 +558,7 @@ { if ( iDialer ) { - iDialerController->UpdateToolbar(); + iDialer->UpdateToolbar(); } } break; @@ -745,8 +761,13 @@ break; case EPhoneViewMenuPane: - iMenuController->SetReplaceFlag( IsReplaceAllowed() ); - iMenuController->DynInitMenuPaneL( aCommandParam ); + // First offer initialization to easydialing, and if no + // initialization done, give it to the menu controller. + if ( !iEasyDialingController->InitializeEasyDialingMenuL( aCommandParam ) ) + { + iMenuController->SetReplaceFlag( IsReplaceAllowed() ); + iMenuController->DynInitMenuPaneL( aCommandParam ); + } break; case EPhoneViewMenuBar: @@ -918,7 +939,7 @@ if ( iDialer ) { - iDialerController->SetServiceCodeFlagL( aCommandParam ); + iDialerController->SetServiceCodeFlag( aCommandParam ); } break; @@ -1057,13 +1078,19 @@ { TPhoneCmdParamBoolean* booleanParam = static_cast( aCommandParam ); - iDialerController->SetDtmfDialerVisibleL( - booleanParam->Boolean() ); + if ( booleanParam->Boolean() ) + { + iDialer->SetControllerL( iDtmfDialerController ); + } + else + { + iDialer->SetControllerL( iDialerController ); + } } break; } - case EPhoneViewSetRetrictedDialer: + case EPhoneViewSetRestrictedDialer: { if ( iDialer ) { @@ -1106,10 +1133,12 @@ case EPhoneViewShowCustomizedDialer: { - TPhoneCmdParamCustomDialer* customDialerParam = - static_cast( aCommandParam ); - iDialerController->ShowCustomizedDialerL( - customDialerParam->DialerController() ); + if ( iDialer ) + { + TPhoneCmdParamCustomDialer* customDialerParam = + static_cast( aCommandParam ); + iDialer->SetControllerL( customDialerParam->DialerController() ); + } } break; case EPhoneViewGetNumberFromEntry: @@ -1148,6 +1177,21 @@ iToolbarController->DimToolbar( booleanParam->Boolean()); break; } + + case EPhoneViewSetInvalidCsPhoneNumberFlag: + iMenuController->SetInvalidCsPhoneNumberFlag( aCommandParam ); + break; + + case EPhoneViewGetInvalidCsPhoneNumberFlag: + iMenuController->GetInvalidCsPhoneNumberFlag( aCommandParam ); + break; + + case EPhoneViewGetEasyDialingMenuId: + case EPhoneViewGetEasyDialingCbaId: + { + iEasyDialingController->ExecuteCommandL( aCmdId, aCommandParam ); + } + break; default: __PHONELOG( EBasic, EPhonePhoneapp, @@ -1372,7 +1416,11 @@ static_cast( aCommandParam )->Type(); TBool isForeground = iAppui->IsForeground(); - if ( isForeground && // newer run effect if not at front + // Check whether the idle is on foreground + TBool idleInFore = ForegroundApplicationWindowGroupId() == IdleWindowGroupId() ? + ETrue : EFalse; + + if ( isForeground && // Newer run effect if not at front ( ( type == EPhoneTransEffectDialerCreate && !iDialerActive ) || ( type == EPhoneTransEffectDialerOpen && !iDialerActive && iBubbleWrapper->IsNumberEntryUsed() ) || @@ -1380,6 +1428,12 @@ { HandleTransitionEffect( type ); } + // In case transition is from idle to dialer show transition effects as well. + else if ( idleInFore && !iDialerActive && + type == EPhoneTransEffectDialerCreate ) + { + HandleTransitionEffect( type ); + } } break; } @@ -1408,8 +1462,7 @@ case EPhoneViewSetNumberEntryObserver: { - NumberEntryChangedHandler()->SetNumberEntryChangedCallBack( - aCommandParam ); + iBubbleWrapper->SetNumberEntryChangedCallBack( aCommandParam ); break; } case EPhoneViewGetSingleItemFetchType: @@ -1447,9 +1500,11 @@ break; case EPhoneViewEnableToolbarButton: + { TPhoneCmdParamInteger* integerParam = static_cast( aCommandParam ); iToolbarController->SetToolbarButtonDimmed( integerParam->Integer(), EFalse ); + } break; default: @@ -1493,7 +1548,26 @@ } break; - case EPhoneViewIsNumberEntryNumericMode: + case EPhoneViewGetEasyDialingInFocusStatus: + case EEasyDialingVoiceCall: + case EEasyDialingVideoCall: + case EEasyDialingSendMessage: + case EEasyDialingOpenContact: + case EEasyDialingCallHandlingActivated: + case EEasyDialingEnterKeyAction: + case EEasyDialingOn: + case EEasyDialingOff: + if ( iDialer ) + { + viewResponse = iEasyDialingController->HandleCommandL( aCmdId ); + } + else + { + viewResponse = EPhoneViewResponseFailed; + } + break; + + case EPhoneViewIsNumberEntryNumericMode: viewResponse = iBubbleWrapper->IsNENumericMode() ? EPhoneViewResponseSuccess : EPhoneViewResponseFailed; @@ -1579,9 +1653,9 @@ case EPhoneViewIsDTMFEditorVisible: if ( iDialer ) { - viewResponse = iDialerController->IsDTMFDialerVisible() ? + viewResponse = ( IsDtmfDialerActive() ? EPhoneViewResponseSuccess : - EPhoneViewResponseFailed; + EPhoneViewResponseFailed ); } else // non-touch. { @@ -1631,13 +1705,13 @@ RemovePhoneDialogsL(); } // Remove DTMF dialer when exist - if ( iDialerController->IsDTMFDialerVisible() ) + if ( IsDtmfDialerActive() ) { static_cast( CEikonEnv::Static()->EikAppUi() ) ->ProcessCommandL( EPhoneDtmfDialerExit ); } else if ( iCustomization && - iDialerController->IsCustomizedDialerVisible() ) + IsCustomDialerActive() ) { iCustomization->HandleCommandL( *this, EPhoneViewOpenCallHandling, NULL ); @@ -1683,7 +1757,7 @@ case EPhoneIsCustomizedDialerVisible: { - viewResponse = iDialerController->IsCustomizedDialerVisible() ? + viewResponse = IsCustomDialerActive() ? EPhoneViewResponseSuccess : EPhoneViewResponseFailed; } @@ -1691,8 +1765,11 @@ case EPhoneViewHideCustomizedDialer: { - iDialerController->HideCustomizedDialer(); - viewResponse = EPhoneViewResponseSuccess; + if ( iDialer ) + { + iDialer->SetControllerL( iDialerController ); + viewResponse = EPhoneViewResponseSuccess; + } } break; case EPhoneViewShowToolbar: @@ -1841,19 +1918,19 @@ case EPhoneViewGetCustomizedDialerMenuResourceId: { - TInt resId = iDialerController->CustomizedMenuResourceId(); + TInt resId = iDialer->Controller()->MenuResourceId(); // easydialing change static_cast( aCommandParam )->SetInteger( resId ); viewResponse = EPhoneViewResponseSuccess; } break; case EPhoneViewGetCustomizedDialerCbaResourceId: { - TInt resId = iDialerController->CustomizedCbaResourceId(); + TInt resId = iDialer->Controller()->CbaResourceId(); // easydialing change static_cast( aCommandParam )->SetInteger( resId ); viewResponse = EPhoneViewResponseSuccess; } break; - + default: if ( iCustomization ) { @@ -2029,18 +2106,13 @@ "CPhoneViewController::HandleResourceChangeL()" ) // Notify the bubble that there has been a resource change iBubbleWrapper->Control()->HandleResourceChange( aType ); - + // Notify dialer and switch statuspane layout. if ( iDialer ) { if ( aType == KEikDynamicLayoutVariantSwitch ) { SwitchLayoutToFlatStatusPaneL( iDialerActive ); - - if ( !iDialerActive && Layout_Meta_Data::IsLandscapeOrientation() ) - { - iDialerController->HideToolbar(); - } } static_cast(iDialer)->HandleResourceChange( aType ); } @@ -2064,10 +2136,10 @@ __PHONELOG( EBasic, EPhoneUIView,"CPhoneViewController::HandleLayoutChange()" ) iPhoneView->SetRect( aRect ); if ( iDialerView ) - { - iDialerView->SetRect( aRect ); - iStatusPane->UpdateTitlePane(); - } + { + iDialerView->SetRect( aRect ); + iStatusPane->UpdateTitlePane(); + } } // --------------------------------------------------------------------------- @@ -2112,6 +2184,17 @@ } // --------------------------------------------------------------------------- +// CPhoneViewController::NumberEntryStateChanged +// --------------------------------------------------------------------------- +// +void CPhoneViewController::NumberEntryStateChanged( TBool aEntryHasText ) + { + iBubbleWrapper->HandleNumberEntryChanged(); + iMenuController->SetNumberEntryEmptyFlag( !aEntryHasText ); + ExecuteCommandL( EPhoneViewUpdateToolbar ); + } + +// --------------------------------------------------------------------------- // CPhoneViewController::GetBlockingDialogIsDisplayed // --------------------------------------------------------------------------- // @@ -2596,7 +2679,9 @@ TInt resourceId = cbaResource->Integer(); iCba->SetCommandSetL( resourceId ); + iCba->DrawDeferred(); + } // --------------------------------------------------------------------------- @@ -3734,24 +3819,32 @@ { iDialerActive = ETrue; + // Hide in-call view toolbar + iToolbarController->HideToolbar(); + + // 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() ); - iDialerView->MakeVisible( ETrue ); - iDialerView->DrawNow(); SwitchLayoutToFlatStatusPaneL( ETrue ); iPhoneView->DrawableWindow()->SetOrdinalPosition( -1 ); iPhoneView->MakeVisible( EFalse ); - iToolbarController->HideToolbar(); - iDialerController->ShowToolbar(); - // Update control stack iAppui->AddToStackL( iDialerView ); - iAppui->RemoveFromStack( iPhoneView ); - } + iAppui->RemoveFromStack( iPhoneView ); + + // Don't make dialer view visible before status pane is updated. + // This prevents unnecessary resizings. + iDialerView->MakeVisible( ETrue ); + iDialerView->DrawDeferred(); + } } // --------------------------------------------------------------------------- @@ -3763,34 +3856,36 @@ __PHONELOG1( EBasic, EPhoneUIView, "CPhoneViewController::SetControltoCallHandlingL iDialerActive (%d)", iDialerActive ); + // If securitymode or emergency call not show toolbar + if ( !iPhoneView->IsSecurityMode() && + !iIncallIndicator->IsEmergencyCall() ) + { + iToolbarController->ShowToolbar(); + } if ( iDialerActive ) { iDialerActive = EFalse; - + // Hide dialer view. Do this before resizing status pane to prevent unnecessary + // 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 - iPhoneView->DrawableWindow()->SetOrdinalPosition( + // Make call handling view top most + iPhoneView->DrawableWindow()->SetOrdinalPosition( iDialerView->DrawableWindow()->OrdinalPosition() ); iPhoneView->MakeVisible( ETrue ); iPhoneView->DrawNow(); - iDialerView->DrawableWindow()->SetOrdinalPosition( -1 ); - iDialerView->MakeVisible( EFalse ); - - iDialerController->HideToolbar(); + iDialerView->DrawableWindow()->SetOrdinalPosition( -1 ); // Update control stack - iAppui->AddToStackL( iPhoneView ); - iAppui->RemoveFromStack( iDialerView ); - } - - // If securitymode or emergency call not show toolbar - if ( !iPhoneView->IsSecurityMode() && - !iIncallIndicator->IsEmergencyCall() ) - { - iToolbarController->ShowToolbar(); - } + iAppui->AddToStackL( iPhoneView ); + iAppui->RemoveFromStack( iDialerView ); + + iEasyDialingController->HandleCommandL( EEasyDialingCallHandlingActivated ); + } } // --------------------------------------------------------------------------- @@ -3897,16 +3992,32 @@ } // --------------------------------------------------------------------------- -// CPhoneViewController::NumberEntryChangedHandler +// CPhoneViewController::IsDtmfDialerActive // --------------------------------------------------------------------------- // -MPhoneNumberEntryChangedHandler* CPhoneViewController::NumberEntryChangedHandler() const +TBool CPhoneViewController::IsDtmfDialerActive() const { - if( iDialerController ) - return iDialerController; - else - return iBubbleWrapper; - + TBool ret = + ( iDialer && iDtmfDialerController && + iDialer->Controller() == iDtmfDialerController ); + return ret; + } + +// --------------------------------------------------------------------------- +// CPhoneViewController::IsCustomDialerActive +// --------------------------------------------------------------------------- +// +TBool CPhoneViewController::IsCustomDialerActive() const + { + TBool ret = EFalse; + if ( iDialer ) + { + MPhoneDialerController* curController = iDialer->Controller(); + ret = ( curController && + curController != iDialerController && + curController != iDtmfDialerController ); + } + return ret; } // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuivoipextension/group/phoneuivoipextension.mmp --- a/phoneapp/phoneuivoipextension/group/phoneuivoipextension.mmp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuivoipextension/group/phoneuivoipextension.mmp Sun Mar 14 13:09:36 2010 +0000 @@ -108,4 +108,7 @@ LIBRARY serviceselector.lib LIBRARY vccuipropertyhandler.lib //For VCC Usage LIBRARY ws32.lib +LIBRARY centralrepository.lib +LIBRARY phoneuiview.lib +LIBRARY aknskins.lib diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuivoipextension/inc/cphonecustomizationvoip.h --- a/phoneapp/phoneuivoipextension/inc/cphonecustomizationvoip.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuivoipextension/inc/cphonecustomizationvoip.h Sun Mar 14 13:09:36 2010 +0000 @@ -20,7 +20,7 @@ #define C_CPHONECUSTOMIZATIONVOIP_H // INCLUDES -#include +#include #include #include #include "mphonecustomization.h" @@ -207,6 +207,11 @@ void GetVoipServiceNameL( TServiceId aServiceId, TDes& aServiceName ) const; /** + * EasyDialing enabled check + */ + TBool EasyDialingEnabled(); + + /** * Modifies menu when there is active call. * @param aResourceId Menu resource id. * @param aMenuPane Menu pane diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuivoipextension/inc/cphonetransferdialercontroller.h --- a/phoneapp/phoneuivoipextension/inc/cphonetransferdialercontroller.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuivoipextension/inc/cphonetransferdialercontroller.h Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2008, 2009 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" @@ -23,7 +23,7 @@ // INCLUDES #include -#include "mphonedialercontroller.h" +#include "cphonedialercontroller.h" // FORWARD DECLARATIONS class CAknToolbar; @@ -31,8 +31,7 @@ /** * VoIP unattended transfer dialer customization */ -NONSHARABLE_CLASS( CPhoneTransferDialerController ): public CBase, - public MPhoneDialerController +NONSHARABLE_CLASS( CPhoneTransferDialerController ): public CPhoneDialerController { public: @@ -45,14 +44,6 @@ public: // From MDialerController - - /** - * Initializes the controller. - * @param aToolbar CAknToolbar instance. - * @since S60 v5.1 - */ - void InitializeL( CAknToolbar& aToolbar ); - /** * Returns Cba resource id * @return Resource Id of the softkeys @@ -75,35 +66,28 @@ const TDesC& NumberEntryPromptTextL(); /** - * Handles the number entry empty event - * @param aEmpty ETrue if numberentry is empty - * @since S60 v5.1 - */ - void HandleNumberEntryIsEmpty( TBool aEmpty ); + * @see MPhoneDialerController + */ + TInt GetButtonData( TButtonIndex aIndex, RPointerArray& aData ) const; /** - * Sets visibility of buttons created by the implementation - * @param aShow ETrue if numberentry is empty - * @since S60 v5.1 - */ - void ShowButtons( TBool aShow ); + * @see MPhoneDialerController + */ + TInt ButtonState( TButtonIndex aIndex ) const; + + /** + * @see MPhoneDialerController + */ + TBool ButtonDimmed( TButtonIndex aIndex ) const; + + /** + * @see MPhoneDialerController + */ + TBool EasyDialingAllowed() const; private: /** - * Creates instance of CAKnButton - * @param aNormalIconId Button normal icon id - * @param aNormalMaskId Mask id - * @param aTooltipText Reference to tooltip text - * @param aSkinIconId Skin icon id - * @return Pointer to created button instance - */ - CAknButton* CreateButtonLC( TInt aNormalIconId, - TInt aNormalMaskId, - const TDesC& aTooltipText, - const TAknsItemID& aSkinIconId ) const; - - /** * Returns tool tip for specific command * @param aCommandId Command id which the tooltip text * is needed @@ -113,6 +97,10 @@ TAknsItemID SkinId( TInt aIconIndex ) const; + CButtonData* CreateButtonDataL( + TInt aCommandId, + TInt aNormalIconId, + TInt aNormalMaskId ) const; protected: /** @@ -122,17 +110,8 @@ private: // Data - // Pointer to CAknToolbar, Not own - CAknToolbar* iToolbar; - - // ETrue if number entry input field is empty - TBool iNumberEntryIsEmpty; - // Number entry prompt text ("Address:") HBufC* iNumberEntryPromptText; - - // ETrue if initialized - TBool iIsInitialized; }; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuivoipextension/src/cphonecustomizationvoip.cpp --- a/phoneapp/phoneuivoipextension/src/cphonecustomizationvoip.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuivoipextension/src/cphonecustomizationvoip.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include "cphonecustomizationvoip.h" #include "tphonecmdparaminteger.h" @@ -207,7 +209,7 @@ { case EPhoneDialerCmdTouchInput: { - if ( !AllowAlphaNumericMode() ) + if ( !VoIPSupportedL() ) { menuPane->DeleteMenuItem( menuItemArray[ i ] ); } @@ -232,7 +234,7 @@ case EPhoneInCallCmdNewCall: { if ( !FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) && - AllowAlphaNumericMode() && + VoIPSupportedL() && R_PHONEUI_NEW_CALL_MENU_VOIP != aResourceId ) { @@ -457,6 +459,11 @@ TBool alphaModeSupported( EFalse ); TRAP_IGNORE( alphaModeSupported = VoIPSupportedL() ); + + if ( !alphaModeSupported ) + { + alphaModeSupported = EasyDialingEnabled(); + } return alphaModeSupported; } @@ -680,6 +687,30 @@ return voipSupported; } +// ----------------------------------------------------------- +// CPhoneCustomizationVoip::EasyDialingEnabled +// ----------------------------------------------------------- +// +TBool CPhoneCustomizationVoip::EasyDialingEnabled() + { + __LOGMETHODSTARTEND( PhoneUIVoIPExtension, + "CPhoneCustomizationVoip::EasyDialingEnabled" ); + + TBool easyDialingEnabled( EFalse ); + if ( FeatureManager::FeatureSupported( KFeatureIdProductIncludesHomeScreenEasyDialing ) ) + { + TInt easyDialingSetting; + TInt err = CPhoneCenRepProxy::Instance()->GetInt( + KCRUidEasyDialSettings, + KEasyDialing, + easyDialingSetting); + if ( !err && easyDialingSetting ) + { + easyDialingEnabled = ETrue; + } + } + return easyDialingEnabled; + } // ----------------------------------------------------------- // CPhoneCustomizationVoip::ModifyInCallMenuL @@ -776,11 +807,12 @@ HBufC* phoneNumber = PhoneNumberFromEntryLC(); + TInt index(KErrNotFound); + if ( aResourceId == R_PHONEUI_NUMBERACQ_OPTIONS_CALL_MENU ) { if ( !CPhoneKeys::Validate( phoneNumber->Des() ) ) - { - TInt index(KErrNotFound); + { if ( aMenuPane.MenuItemExists( EPhoneNumberAcqCmdCall, index ) ) { aMenuPane.DeleteMenuItem( EPhoneNumberAcqCmdCall ); @@ -794,12 +826,12 @@ aMenuPane.AddMenuItemL( voipMenuItem->iData ); } - else if ( iStateMachine.PhoneEngineInfo()->PhoneNumberIsServiceCode() ) + else if ( !aMenuPane.MenuItemExists( EPhoneNumberAcqCmdCall, index ) ) { - // When user writes string recognized as service code (eg.*#31# -> clir off) - // call menu is not visible. Internet call must still be possible so - // internet call option is added here to the menu. - + // Call menu is removed if user inserts anything that is not + // a valid cs number, so must add Internet call option here where + // we know that voip is however supported. + // If number entry is empty don't add internet call option if ( phoneNumber->Length() ) { @@ -1089,7 +1121,16 @@ if( array[i].iCallState == CTelMenuExtension::EOutgoing || array[i].iCallState == CTelMenuExtension::EActive || array[i].iCallState == CTelMenuExtension::EOnHold ) - { + { + if( aFeature == EFeatureTransfer && + array[i].iCallState == CTelMenuExtension::EOutgoing && + array[i].iCallType == CTelMenuExtension::EPsVoice ) + { + // If there is outgoing VoIP call then transfer is not supported + supported = EFalse; + break; + } + if( firstCallType == CTelMenuExtension::EUninitialized ) { // Memorize first found call type @@ -1380,7 +1421,7 @@ "CPhoneCustomizationVoip::AddHandoverMenuItemIfNeededL" ); // Menu items to be added - if ( iVccHandler && AllowAlphaNumericMode() && + if ( iVccHandler && VoIPSupportedL() && ( aResourceId == R_PHONEUI_CALLHANDLING_INCALL_OPTIONS_MENU || aResourceId == R_PHONEUI_CALLWAITING_OPTIONS_MENU || aResourceId == R_PHONEUI_ACTIVEANDHELDCALL_OPTIONS_MENU || diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuivoipextension/src/cphonestateidlevoip.cpp --- a/phoneapp/phoneuivoipextension/src/cphonestateidlevoip.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuivoipextension/src/cphonestateidlevoip.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -151,7 +151,7 @@ HBufC* phoneNumber = PhoneNumberFromEntryLC(); - if ( !IsSimOk() || IsEmergencyNumber( *phoneNumber ) ) + if ( !IsSimOk() || IsEmergencyNumber( *phoneNumber ) || IsDialingExtensionInFocusL() ) { CPhoneIdle::HandleSendCommandL(); } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuivoipextension/src/cphonestatesinglevoip.cpp --- a/phoneapp/phoneuivoipextension/src/cphonestatesinglevoip.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuivoipextension/src/cphonestatesinglevoip.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -40,6 +40,9 @@ #include "cphonestateutilsvoip.h" #include "cphonestatemachinevoip.h" +#include "easydialingcommands.hrh" + + // ================= MEMBER FUNCTIONS ======================= // C++ default constructor can NOT contain any code, that @@ -137,7 +140,15 @@ break; case EPhoneNumberAcqCmdSendCommand: - StartCallingL(); + // If easydialing has focus, call should be initiated to focused contact. + if ( IsDialingExtensionInFocusL() ) + { + commandStatus = CPhoneSingleCall::HandleCommandL( aCommand ); + } + else + { + StartCallingL(); + } break; case EPhoneCmdAcceptUnattendedTransfer: @@ -177,11 +188,19 @@ if( IsNumberEntryVisibleL() && neLength ) { - if ( IsOnScreenDialerSupported() && - ( IsDTMFEditorVisibleL() || - IsCustomizedDialerVisibleL() ) ) + if ( IsOnScreenDialerSupported() ) { - return; + if ( IsDTMFEditorVisibleL() || + IsCustomizedDialerVisibleL() ) + { + return; + } + // If easydialing has focus, call should be initiated to focused contact. + else if ( IsDialingExtensionInFocusL() ) + { + CPhoneSingleCall::HandleKeyMessageL( aMessage, aKeyCode ); + return; + } } StartCallingL(); diff -r abbe9afab2af -r 2411cd0e2ad6 phoneapp/phoneuivoipextension/src/cphonetransferdialercontroller.cpp --- a/phoneapp/phoneuivoipextension/src/cphonetransferdialercontroller.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneapp/phoneuivoipextension/src/cphonetransferdialercontroller.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2008, 2009 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" @@ -19,8 +19,8 @@ // INCLUDES #include -#include #include +#include #include #include @@ -69,6 +69,7 @@ // might leave. // CPhoneTransferDialerController::CPhoneTransferDialerController() + : CPhoneDialerController( NULL, *CCoeEnv::Static() ) { } @@ -98,49 +99,6 @@ } // ----------------------------------------------------------- -// CPhoneTransferDialerController::Initialize -// ----------------------------------------------------------- -// -void CPhoneTransferDialerController::InitializeL( CAknToolbar& aToolbar ) - { - __LOGMETHODSTARTEND( PhoneUIVoIPExtension, - "CPhoneTransferDialerController::InitializeL()"); - - if ( !iIsInitialized ) - { - __PHONELOG1( - EAll, - PhoneUIVoIPExtension, - "Toolbar control count:=%d", - aToolbar.CountComponentControls()); - iToolbar = &aToolbar; - // Create transfer specific buttons and add them to the - // toolbar starting from index 0 - CAknButton* button( NULL ); - - for( TInt i = 0; i < KButtonCount; i++ ) - { - TAknsItemID skinId = SkinId( bArray[i].iIconIndex ); - // Load tooltip text. - HBufC* tooltipText = GetTooltipTextL( bArray[i].iCommandId ); - CleanupStack::PushL( tooltipText ); - button = CreateButtonLC( - bArray[i].iIconIndex, - bArray[i].iMaskIndex, - *tooltipText, - skinId ); - // Toolbar takes ownership of the button - iToolbar->AddItemL( button, EAknCtButton, bArray[i].iCommandId, 0, i ); - CleanupStack::Pop( button ); - CleanupStack::PopAndDestroy( tooltipText ); - } - iIsInitialized = ETrue; - } - - iNumberEntryIsEmpty = ETrue; - } - -// ----------------------------------------------------------- // CPhoneTransferDialerController::CbaResourceId // ----------------------------------------------------------- // @@ -155,7 +113,7 @@ // TInt CPhoneTransferDialerController::MenuResourceId() const { - if ( iNumberEntryIsEmpty ) + if ( !iNumberAvailable ) { return EPhoneVoIPTransferDialerNumberEntryEmptyMenubar; } @@ -177,84 +135,138 @@ { iNumberEntryPromptText = StringLoader::LoadL( CPhoneMainResourceResolver::Instance()-> - ResolveResourceID( EPhoneVoIPTransferAddress ) ); + ResolveResourceID( EPhoneVoIPTransferAddress ), &iCoeEnv ); } return *iNumberEntryPromptText; } -// ----------------------------------------------------------- -// CPhoneTransferDialerController::HandleNumberEntryIsEmpty -// ----------------------------------------------------------- +// --------------------------------------------------------------------------- +// GetButtonData +// --------------------------------------------------------------------------- // -void CPhoneTransferDialerController::HandleNumberEntryIsEmpty( TBool aIsEmpty ) +TInt CPhoneTransferDialerController::GetButtonData( TButtonIndex aIndex, RPointerArray& aData ) const { - __LOGMETHODSTARTEND( PhoneUIVoIPExtension, - "CPhoneTransferDialerController::HandleNumberEntryIsEmpty()"); - __ASSERT_DEBUG( iToolbar, Panic( EPhoneCtrlInvariant ) ); - iToolbar->SetItemDimmed( EPhoneCmdTransferDialerOk, aIsEmpty, EFalse ); - iToolbar->SetItemDimmed( EPhoneCmdTransferDialerSearch, !aIsEmpty, EFalse ); - iToolbar->SetItemDimmed( EPhoneDialerCmdClear, aIsEmpty, EFalse ); - iNumberEntryIsEmpty = aIsEmpty; + TInt err = KErrNone; + + TInt arrayIdx = KErrNotFound; + if ( aIndex == ECallButton ) + { + arrayIdx = 0; + } + else if ( aIndex == EPhonebookButton ) + { + arrayIdx = 1; + } + + if ( arrayIdx >= 0 ) + { + const TPhoneDialerToolbarButton& arrItem = bArray[ arrayIdx ]; + CButtonData* btn = NULL; + TRAP( err, btn = CreateButtonDataL( arrItem.iCommandId, + arrItem.iIconIndex, + arrItem.iMaskIndex ) ); + if ( !err ) + { + err = aData.Append( btn ); + if ( err ) + { + delete btn; + } + } + } + else + { + // Trust base class on other buttons (i.e. the clear button) + err = CPhoneDialerController::GetButtonData( aIndex, aData ); + } + + return err; } -// ----------------------------------------------------------- -// CPhoneTransferDialerController::ShowButtons -// ----------------------------------------------------------- +// --------------------------------------------------------------------------- +// ButtonState +// --------------------------------------------------------------------------- // -void CPhoneTransferDialerController::ShowButtons( TBool aShow ) +TInt CPhoneTransferDialerController::ButtonState( TButtonIndex aIndex ) const { - __LOGMETHODSTARTEND( PhoneUIVoIPExtension, - "CPhoneTransferDialerController::ShowButtons()"); - __ASSERT_DEBUG( iToolbar, Panic( EPhoneCtrlInvariant ) ); - for( TInt i = 0; i < KButtonCount; i++ ) + // Out button have only one state. Trust base class on clear button + if ( aIndex == ECallButton || aIndex == EPhonebookButton ) { - iToolbar->HideItem( bArray[ i ].iCommandId, !aShow, EFalse ); - } - - if ( aShow ) + return 0; + } + else { - iToolbar->SetItemDimmed( EPhoneCmdTransferDialerOk, ETrue, EFalse ); - iToolbar->SetItemDimmed( EPhoneCmdTransferDialerSearch, EFalse, EFalse ); - iToolbar->SetItemDimmed( EPhoneDialerCmdClear, ETrue, EFalse ); + return CPhoneDialerController::ButtonState( aIndex ); } - - iToolbar->DrawDeferred(); } // --------------------------------------------------------------------------- -// PhoneTransferDialerController::CreateButtonLC +// ButtonDimmed // --------------------------------------------------------------------------- // -CAknButton* CPhoneTransferDialerController::CreateButtonLC( - TInt aNormalIconId, - TInt aNormalMaskId, - const TDesC& aTooltipText, - const TAknsItemID& aSkinIconId ) const - { +TBool CPhoneTransferDialerController::ButtonDimmed( TButtonIndex aIndex ) const + { + TBool dimmed = EFalse; + + // Ok is dimmed when there's no number. Search is dimmed when there is + // a number. Trust base class on clear button. + if ( aIndex == ECallButton ) + { + dimmed = !iNumberAvailable; + } + else if ( aIndex == EPhonebookButton ) + { + dimmed = iNumberAvailable; + } + else + { + dimmed = CPhoneDialerController::ButtonDimmed( aIndex ); + } + return dimmed; + } + +// --------------------------------------------------------------------------- +// EasyDialingAllowed +// --------------------------------------------------------------------------- +// +TBool CPhoneTransferDialerController::EasyDialingAllowed() const + { + return EFalse; + } + +// --------------------------------------------------------------------------- +// PhoneTransferDialerController::CreateButtonDataL +// --------------------------------------------------------------------------- +// +MPhoneDialerController::CButtonData* CPhoneTransferDialerController::CreateButtonDataL( + TInt aCommandId, + TInt aNormalIconId, + TInt aNormalMaskId ) const + { __LOGMETHODSTARTEND( PhoneUIVoIPExtension, - "CPhoneTransferDialerController::CreateButtonLC()"); + "CPhoneTransferDialerController::CreateButtonDataL()"); + + // Load tooltip text. + HBufC* tooltipText = GetTooltipTextL( aCommandId ); + CleanupStack::PushL( tooltipText ); + + // Load icon TFileName mifPath( KDriveZ ); mifPath.Append( KDC_APP_BITMAP_DIR ); mifPath.Append( KPhoneMifFileName ); - - CAknButton* button = CAknButton::NewLC( - mifPath, - aNormalIconId, - aNormalMaskId, - -1, -1, // dimmed - -1, -1, // pressed - -1, -1, // hover - KNullDesC, - aTooltipText, // help - 0, // flags - 0, // state flags - aSkinIconId ); - - button->SetFocusing( EFalse ); - button->SetBackground( iToolbar ); - - return button; + + TAknsItemID skinId = SkinId( aNormalIconId ); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + CGulIcon* icon = AknsUtils::CreateGulIconL( skin, skinId, mifPath, + aNormalIconId, aNormalMaskId ); + CleanupStack::PushL( icon ); + + CButtonData* btnData = new (ELeave) CButtonData( aCommandId, icon, tooltipText ); + CleanupStack::Pop( icon ); + CleanupStack::Pop( tooltipText ); + + return btnData; } // --------------------------------------------------------------------------- @@ -278,13 +290,16 @@ resourceId = R_VOIP_DIALER_TOOLTIP_SEARCH; break; default: - tooltip = KNullDesC().Alloc(); break; } if ( resourceId ) { - tooltip = StringLoader::LoadL( resourceId, CCoeEnv::Static() ); + tooltip = StringLoader::LoadL( resourceId, &iCoeEnv ); + } + else + { + tooltip = KNullDesC().AllocL(); } return tooltip; } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactdataselection.h --- a/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactdataselection.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/PhoneCntFinder/ContactService/inc/cphcntcontactdataselection.h Sun Mar 14 13:09:36 2010 +0000 @@ -20,7 +20,7 @@ #define CPHCNTCONTACTDATASELECTION_H #include -#include "MPhCntMatch.h" +#include "mphcntmatch.h" NONSHARABLE_CLASS( CPhCntSelectedData ) : public CBase { diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/PhoneCntFinder/ContactService/src/CPhCntService.cpp --- a/phoneengine/PhoneCntFinder/ContactService/src/CPhCntService.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/PhoneCntFinder/ContactService/src/CPhCntService.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -82,8 +82,8 @@ iCriteriaArray.AppendL( assignCriteria ); + CleanupStack::Pop( assignCriteria ); iAiwService->AttachL( iCriteriaArray ); - CleanupStack::Pop( assignCriteria ); } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/PhoneCntFinder/inc/Misc/MPhCntThumbnailLoaderObserver.h --- a/phoneengine/PhoneCntFinder/inc/Misc/MPhCntThumbnailLoaderObserver.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/PhoneCntFinder/inc/Misc/MPhCntThumbnailLoaderObserver.h Sun Mar 14 13:09:36 2010 +0000 @@ -21,7 +21,7 @@ // INCLUDES #include -#include "CPhCntThumbnailLoader.h" +#include "cphcntthumbnailloader.h" // FORWARD DECLARATIONS class CFbsBitmap; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/PhoneCntFinder/src/CPhoneCntFactoryImpl.cpp --- a/phoneengine/PhoneCntFinder/src/CPhoneCntFactoryImpl.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/PhoneCntFinder/src/CPhoneCntFactoryImpl.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -45,7 +45,7 @@ #include "cphcntstoreloaderimpl.h" #include // CONE -#include // For TSecUi +#include // For TSecUi #include // Feature Manager #include diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/callhandling/bwins/callhandlingu.def --- a/phoneengine/callhandling/bwins/callhandlingu.def Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/callhandling/bwins/callhandlingu.def Sun Mar 14 13:09:36 2010 +0000 @@ -76,4 +76,5 @@ ?ForwardCallToAddress@CPECallHandling@@UAEHH@Z @ 75 NONAME ; int CPECallHandling::ForwardCallToAddress(int) ??1CPEDtmfHandling@@UAE@XZ @ 76 NONAME ; CPEDtmfHandling::~CPEDtmfHandling(void) ?CallCapsChanged@CPEConferenceCall@@UAEXW4TCCEConferenceCallCaps@MCCEConferenceCallObserver@@@Z @ 77 NONAME ; void CPEConferenceCall::CallCapsChanged(enum MCCEConferenceCallObserver::TCCEConferenceCallCaps) + ?ReleaseConference@CPECallHandling@@UAEHXZ @ 78 NONAME ; int CPECallHandling::ReleaseConference(void) diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/callhandling/eabi/callhandlingu.def --- a/phoneengine/callhandling/eabi/callhandlingu.def Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/callhandling/eabi/callhandlingu.def Sun Mar 14 13:09:36 2010 +0000 @@ -165,4 +165,6 @@ _ZThn8_NK15CPECallHandling16GetCallIdByStateEj @ 164 NONAME _ZThn8_NK15CPECallHandling28GetCallTerminatedDiagnosticsER4TBufILi128EE @ 165 NONAME _ZThn8_NK15CPECallHandling9CallOwnerEv @ 166 NONAME + _ZN15CPECallHandling17ReleaseConferenceEv @ 167 NONAME + _ZThn8_N15CPECallHandling17ReleaseConferenceEv @ 168 NONAME diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/callhandling/inc/cpecallhandling.h --- a/phoneengine/callhandling/inc/cpecallhandling.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/callhandling/inc/cpecallhandling.h Sun Mar 14 13:09:36 2010 +0000 @@ -432,6 +432,13 @@ * @return Error (KErrNone is success). */ IMPORT_C TInt ForwardCallToAddress( TInt aIndex ); + + /** + * Makes HangUp requests for conference call. + * @return Error (ECCPErrorNotFound if there is not a conference call + * + */ + IMPORT_C TInt ReleaseConference(); public: // From MPECallHandling - DTMF related /** diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/callhandling/inc/mpecallhandling.h --- a/phoneengine/callhandling/inc/mpecallhandling.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/callhandling/inc/mpecallhandling.h Sun Mar 14 13:09:36 2010 +0000 @@ -317,6 +317,14 @@ * @return Error (KErrNone is success). */ virtual TInt ForwardCallToAddress( TInt aIndex ) = 0; + + /** + * Put all the calls to idle and make an request to + * end the connection + * @return KErrNotFound if there is not a call + * KErrNone if there is one call at least + */ + virtual TInt ReleaseConference() = 0; public: // DTMF related /** diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/callhandling/src/cpecallhandling.cpp --- a/phoneengine/callhandling/src/cpecallhandling.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/callhandling/src/cpecallhandling.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -833,10 +833,7 @@ else if ( CallIdCheck::IsConference( aCallId ) ) { - if( iConferenceCall ) - { - errorCode = iConferenceCall->HangUp(); - } + ReleaseConference(); } return errorCode; } @@ -855,12 +852,7 @@ RejectCall(); // Rejects ringing call if one exists. - if ( iConferenceCall ) - { - TEFLOGSTRING( KTAMESOUT, - "CALL CPECallHandling::TerminateAllConnections: Hanging Up conference call" ); - iConferenceCall->HangUp(); - } + ReleaseConference(); // Release conference call if exists // Hangup normal Voice Calls for( TInt callId = 0; callId < KPEMaximumNumberOfVoiceCalls; callId++ ) @@ -1916,6 +1908,7 @@ SendMessage( MEngineMonitor::EPEMessageInitiatedEmergencyCall ); TEFLOGSTRING( KTAINT, "CALL CPECallHandling::DialEmergencyCall start emergency dialing" ); CPESingleCall* callData = iCallArrayOwner->GetCallObject( KPEEmergencyCallId ); + // coverity[dereference] callData->DialEmergency( aEmergencyNumber ); } @@ -2466,6 +2459,20 @@ } } - +// ----------------------------------------------------------------------------- +// CPECallHandling::ReleaseConference +// Release conference call +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CPECallHandling::ReleaseConference() + { + TInt errorCode( ECCPErrorNotFound ); + + if ( iConferenceCall ) + { + errorCode = iConferenceCall->HangUp(); + } + return errorCode; + } // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/loghandling/inc/cpelogevent.h --- a/phoneengine/loghandling/inc/cpelogevent.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/loghandling/inc/cpelogevent.h Sun Mar 14 13:09:36 2010 +0000 @@ -103,7 +103,7 @@ /** * Update log info for the log event - * @param TPELogInfo& alogInfo, log information + * @param CPELogInfo& alogInfo, log information * @return None. */ void UpdateLogInfoL( const CPELogInfo& aLogInfo ); @@ -237,6 +237,13 @@ */ void SetRemoteContact( CLogEvent& aEvent, const CPELogInfo& aLogInfo ); + /** + * Removes from event data the given tag and data attached to it. + * @since S60 v5.1 + * @param aTag Tag to be removed + */ + void RemoveTagFromDataFieldL( const TDesC8& aTag ); + private: // Data // Owner of the object. CPELogHandling& iOwner; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/loghandling/inc/cpeloghandling.h --- a/phoneengine/loghandling/inc/cpeloghandling.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/loghandling/inc/cpeloghandling.h Sun Mar 14 13:09:36 2010 +0000 @@ -254,6 +254,15 @@ CPELogExtensionWrapper* CreateExtensionWrapperLC( const TUid& aPluginUid ) const; + /** + * Checks if string is valid number for CS call. + * @since S60 v5.1 + * @param aString A string to be checked. + * @return ETrue if valid phone number. + */ + TBool IsValidPhoneNumber( + const TDesC& aString ) const; + private: // data // Reference to MPEPhoneModelInternal, also object owner MPEPhoneModelInternal& iModel; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/loghandling/src/cpelogevent.cpp --- a/phoneengine/loghandling/src/cpelogevent.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/loghandling/src/cpelogevent.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -673,6 +673,16 @@ if ( KNullDesC() != aLogInfo.PhoneNumber() ) { aEvent.SetNumber( aLogInfo.PhoneNumber() ); + + if ( CPELogInfo::EPEVoIPEvent == aLogInfo.EventType() ) + { + TRAPD( error, RemoveTagFromDataFieldL( KLogsDataFldTag_URL ) ); + if( error ) + { + TEFLOGSTRING2( KTAERROR, + "LOG CPELogEvent::SetRemoteContact()>RemoveTagFromDataFieldL(), error=%d", error ) + } + } } if ( KNullDesC() != aLogInfo.VoipAddress() ) @@ -681,8 +691,40 @@ if ( error ) { TEFLOGSTRING2( KTAERROR, - "LOG CPELogEvent::SetLogEvent()>SetDataFieldL(), error=%d", error ) + "LOG CPELogEvent::SetRemoteContact()>SetDataFieldL(), error=%d", error ) } + aEvent.SetNumber( KNullDesC() ); + } + } + +// ----------------------------------------------------------------------------- +// CPELogEvent::RemoveTagFromDataFieldL +// ----------------------------------------------------------------------------- +// +void CPELogEvent::RemoveTagFromDataFieldL( const TDesC8& aTag ) + { + __ASSERT_ALWAYS( aTag.Length() != 0 , + User::Leave( KErrArgument ) ); + + TInt index = iEvent->Data().Find( aTag ); + if ( KErrNotFound != index ) + { + HBufC8* eventData = iEvent->Data().AllocLC(); + TPtrC8 urlData = eventData->Mid( index ); + TInt otherTag = urlData.Find( KLogsDataFldNameDelimiter ); + + const TInt dlLen = KLogsDataFldNameDelimiter().Length(); + if ( KErrNotFound == otherTag ) + { + eventData->Des().Delete( index - dlLen, urlData.Length() + dlLen ); + } + else + { + eventData->Des().Delete( index - dlLen, otherTag ); + } + iEvent->SetDataL( *eventData ); + + CleanupStack::PopAndDestroy( eventData ); } } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/loghandling/src/cpeloghandling.cpp --- a/phoneengine/loghandling/src/cpeloghandling.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/loghandling/src/cpeloghandling.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -394,13 +394,16 @@ if ( EPECallTypeVoIP == iDataStore.CallType( aCallId ) ) { - // voip address field must be used for voip calls - aLogInfo.SetVoipAddress( aLogInfo.PhoneNumber() ); - aLogInfo.SetPhoneNumber( KNullDesC() ); + if ( EFalse == IsValidPhoneNumber( aLogInfo.PhoneNumber() ) ) + { + // voip address field must be used for voip calls if + // string is not valid for CS call. + aLogInfo.SetVoipAddress( aLogInfo.PhoneNumber() ); + aLogInfo.SetPhoneNumber( KNullDesC() ); + } } } - // ----------------------------------------------------------------------------- // CPELogHandling::SaveCallInfoL // Update log external data. @@ -841,4 +844,23 @@ return CPELogExtensionWrapper::NewLC( aPluginUid ); } +// ----------------------------------------------------------------------------- +// CPELogHandling::IsValidPhoneNumber +// ----------------------------------------------------------------------------- +// +TBool CPELogHandling::IsValidPhoneNumber( + const TDesC& aString ) const + { + _LIT( KAllowedCharsInPhoneNumber, "0123456789*+pw#PW" ); + + TLex input( aString ); + TPtrC validChars( KAllowedCharsInPhoneNumber ); + while ( validChars.Locate( input.Peek() ) != KErrNotFound ) + { + input.Inc(); + } + + return ( !input.Remainder().Length() ); + } + // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/phonemodel/inc/cpemessagehandler.h --- a/phoneengine/phonemodel/inc/cpemessagehandler.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/phonemodel/inc/cpemessagehandler.h Sun Mar 14 13:09:36 2010 +0000 @@ -167,7 +167,13 @@ * @return Return possible error code. */ TInt HandleReleaseCall( TPEHangUpOptions aAutoResumeOption = ETPEHangUpDefault ); - + + /** + * Handles release message from application + * @return Return possible error code. + */ + TInt HandleReleaseConference(); + /** * Handles send dtmf message from phone application * @return possible error code from the CallHandling subsystem. @@ -566,11 +572,6 @@ TInt HandleReplaceActive(); /** - * Check if phone is locked, if locked leave with ECCPErrorAuthenticationFailed error. - */ - void CheckIfPhoneIsLockedL(); - - /** * Handles unattended transfer request response. * @param aAcceptRequest ETrue to accept, EFalse to reject request. */ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/phonemodel/src/cpeclientcommandhandlermonitor.cpp --- a/phoneengine/phonemodel/src/cpeclientcommandhandlermonitor.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/phonemodel/src/cpeclientcommandhandlermonitor.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -442,10 +442,10 @@ TEFLOGSTRING2( KTAINT, "CPEClientCommandHandlerMonitor::HangUp aState=%d", aState); TInt ret( ECCPErrorNotFound ); - TPEState conferenceState = iCallHandling.GetCallState( KPEConferenceCallID ); + TPEState conferenceState = iModel.DataStore()->ConferenceCallState(); if ( conferenceState == aState ) { - ret = iCallHandling.HangUp( KPEConferenceCallID, ETPEHangUpDefault ); + ret = iCallHandling.ReleaseConference(); } else { diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/phonemodel/src/cpeexternaldatahandler.cpp --- a/phoneengine/phonemodel/src/cpeexternaldatahandler.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/phonemodel/src/cpeexternaldatahandler.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/phonemodel/src/cpemessagehandler.cpp --- a/phoneengine/phonemodel/src/cpemessagehandler.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/phonemodel/src/cpemessagehandler.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -76,9 +76,9 @@ // None. // CONSTANTS -// Prefix change off. See SettingsInternalCRKeys.h +// Prefix change off. See settingsinternalcrkeys.h const TInt KPEPrefixChangeOff = 0; -// Prefix change on. See SettingsInternalCRKeys.h +// Prefix change on. See settingsinternalcrkeys.h const TInt KPEPrefixChangeOn = 1; // International prefix _LIT( KPEIntPrefix, "+" ); @@ -403,6 +403,19 @@ } // ----------------------------------------------------------------------------- +// CPEMessageHandler::HandleReleaseConference +// Handles release message from phone application +// Method calls HangUp method from the CallHandling subsystem. +// ----------------------------------------------------------------------------- +// +TInt CPEMessageHandler::HandleReleaseConference() + { + + return iCallHandling.ReleaseConference(); + + } + +// ----------------------------------------------------------------------------- // CPEMessageHandler::HandleSendDtmf // Handles send dtmf message from phone application // Method fetches dtmf string from the CPEEngineInfo class and then @@ -2838,26 +2851,6 @@ } // ----------------------------------------------------------------------------- -// CPEMessageHandler::CheckIfPhoneIsLockedL -// ----------------------------------------------------------------------------- -// -void CPEMessageHandler::CheckIfPhoneIsLockedL() - { - // Check if phone is locked - TInt keyLockStatus( EAutolockStatusUninitialized ); - TInt err = RProperty::Get( KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, keyLockStatus ); - const TBool phoneIsLocked = ( keyLockStatus > EAutolockOff ); - - if ( phoneIsLocked && err == KErrNone ) - { - // New call is not possible if device lock is on - TEFLOGSTRING2( KTAERROR, - "PE CPEMessageHandler::CheckIfPhoneIsLockedL, keyLockStatus : %d", keyLockStatus ); - User::Leave( ECCPErrorAuthenticationFailed ); - } - } - -// ----------------------------------------------------------------------------- // CPEMessageHandler::IsActiveVideo // Checks if there are any connected video calls // ----------------------------------------------------------------------------- @@ -2896,7 +2889,7 @@ if ( iDataStore.RemoteColpNumber( aCallId ).Length() ) { - iModel.SendMessage( MEngineMonitor::EPEMessageColpNumberAvailable ); + iModel.SendMessage( MEngineMonitor::EPEMessageColpNumberAvailable, aCallId ); } } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/phonemodel/src/cpeparserphonenumberhandler.cpp --- a/phoneengine/phonemodel/src/cpeparserphonenumberhandler.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/phonemodel/src/cpeparserphonenumberhandler.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -69,9 +69,6 @@ &aNumber, &aDtmfPostfix ); - // Check if phone is locked - iOwner.CheckIfPhoneIsLockedL(); - if ( aNumber.Length() == 0 ) { User::Leave( ECCPErrorInvalidPhoneNumber ); diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/phonemodel/src/cpeparsersimcontrolhandler.cpp --- a/phoneengine/phonemodel/src/cpeparsersimcontrolhandler.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/phonemodel/src/cpeparsersimcontrolhandler.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -22,8 +22,8 @@ #include #include #include -#include -#include +#include +#include #include diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/phonemodel/src/cpeparservoipnumberhandler.cpp --- a/phoneengine/phonemodel/src/cpeparservoipnumberhandler.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/phonemodel/src/cpeparservoipnumberhandler.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -98,9 +98,6 @@ &aDtmfPostfix ); TPEPhoneNumber phoneNumber; - - // Check if phone is locked - iOwner.CheckIfPhoneIsLockedL(); if ( aNumber.Length() == 0 ) { diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/phonemodel/src/cpepcnparserprocedurehandler.cpp --- a/phoneengine/phonemodel/src/cpepcnparserprocedurehandler.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/phonemodel/src/cpepcnparserprocedurehandler.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -20,8 +20,8 @@ #include "cpepcnparserprocedurehandler.h" #include "mpephonemodelinternal.h" #include -#include -#include +#include +#include #include diff -r abbe9afab2af -r 2411cd0e2ad6 phoneengine/phonemodel/src/cpephonemodel.cpp --- a/phoneengine/phonemodel/src/cpephonemodel.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneengine/phonemodel/src/cpephonemodel.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -478,7 +478,9 @@ case MEngineMonitor::EPEMessageRemotePartyInfoChanged: return MESSAGE("EPEMessageRemotePartyInfoChanged"); case MEngineMonitor::EPEMessageConnectingWithInband: - return MESSAGE("EPEMessageConnectingWithInband"); + return MESSAGE("EPEMessageConnectingWithInband"); + case MEngineMonitor::EPEMessageColpNumberAvailable: + return MESSAGE("EPEMessageColpNumberAvailable"); // Contact messages 3000 - 3999 case MEngineMonitor::EPEMessageThumbnailLoadingCompleted: @@ -716,8 +718,10 @@ errorCode = iMessageHandler->HandleReleaseAll( ); break; case MPEPhoneModel::EPEMessageRelease: //Make HangUp request + errorCode = iMessageHandler->HandleReleaseCall( ); + break; case CPEPhoneModelIF::EPEMessageHangUpConference: - errorCode = iMessageHandler->HandleReleaseCall( ); + errorCode = iMessageHandler->HandleReleaseConference(); break; case MPEPhoneModel::EPEMessageAnswer: //Make Answer request errorCode = iMessageHandler->HandleAnswerCall( EFalse ); diff -r abbe9afab2af -r 2411cd0e2ad6 phonesettings/pslncallimageplugin/Data/PslnCallImagePluginRsc.rss --- a/phonesettings/pslncallimageplugin/Data/PslnCallImagePluginRsc.rss Mon Mar 08 21:43:24 2010 +0000 +++ b/phonesettings/pslncallimageplugin/Data/PslnCallImagePluginRsc.rss Sun Mar 14 13:09:36 2010 +0000 @@ -102,11 +102,13 @@ { command = EPslnCmdAppActivate; txt = qtn_skins_option_activate; + flags = EEikMenuItemAction; }, MENU_ITEM { command = EPslnCmdAppDownload; txt = qtn_options_change; + flags = EEikMenuItemAction; }, #ifdef __SERIES60_HELP MENU_ITEM diff -r abbe9afab2af -r 2411cd0e2ad6 phonesettings/pslncallimageplugin/src/PslnCallImagePlugin.cpp --- a/phonesettings/pslncallimageplugin/src/PslnCallImagePlugin.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phonesettings/pslncallimageplugin/src/PslnCallImagePlugin.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -41,13 +41,13 @@ // Psln Framework specific. #include #include -#include +#include // General services #include // Resources -#include +#include // Logging #include "PslnCallImagePluginLogger.h" diff -r abbe9afab2af -r 2411cd0e2ad6 phonesettings/pslncallimageplugin/src/PslnCallImagePluginDRM.cpp --- a/phonesettings/pslncallimageplugin/src/PslnCallImagePluginDRM.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phonesettings/pslncallimageplugin/src/PslnCallImagePluginDRM.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include // Logging diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/BubbleManager/Inc/BMTouchPaneButton.h --- a/phoneuis/BubbleManager/Inc/BMTouchPaneButton.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/BubbleManager/Inc/BMTouchPaneButton.h Sun Mar 14 13:09:36 2010 +0000 @@ -182,6 +182,11 @@ */ void GetTextColors( TRgb& aPenColor ) const; + /** + * Selects the correct text color. + */ + void SelectTextColor(); + private: // data /** * Array of the button commands. diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/BubbleManager/Src/BMBubbleManager.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleManager.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/BubbleManager/Src/BMBubbleManager.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -992,7 +992,7 @@ TBool calledBegin = (TBool) CAknTransitionUtils::GetData( ( TInt ) this ); // Only draw parent control if no number entry exists, the number entry is // used or if begin has not been called. - if ( !iNumberEntry || iNumberEntry->IsUsed() || !calledBegin ) + if ( iNumberEntry->IsUsed() || !calledBegin ) { // Do redraw. Do not use DrawDeferred() here! iParentControl->DrawNow(); diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/BubbleManager/Src/BMBubbleOutlookFiveLined.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookFiveLined.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookFiveLined.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -166,7 +166,7 @@ TInt CBubbleOutlookFiveLined::CountComponentControls() const { TInt amount = 0; - + if ( iNumberType ) { amount++; @@ -238,9 +238,8 @@ // CCoeControl* CBubbleOutlookFiveLined::ComponentControl(TInt aIndex) const { - TInt amount = -1; - + // coverity[var_compare_op] if ( iNumberType ) { amount++; @@ -248,6 +247,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iNumberType->Control(); } @@ -328,6 +328,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iSmallCallIndication->Control(); } @@ -358,6 +359,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iBigCallIndicator->Control(); } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/BubbleManager/Src/BMBubbleOutlookNE.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookNE.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookNE.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -41,7 +41,7 @@ //for resources #include -#include +#include // CONSTANTS const TUint8 KBubbleNE1LongLineFormat = 0; diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/BubbleManager/Src/BMBubbleOutlookOneLined.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookOneLined.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookOneLined.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -198,6 +198,7 @@ CCoeControl* CBubbleOutlookOneLined::ComponentControl( TInt aIndex ) const { TInt amount = -1; + // coverity[var_compare_op] if ( iSmallCallIndication ) { amount++; @@ -205,6 +206,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iSmallCallIndication->Control(); } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/BubbleManager/Src/BMBubbleOutlookThreeLined.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookThreeLined.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookThreeLined.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -216,7 +216,7 @@ TInt CBubbleOutlookThreeLined::CountComponentControls() const { TInt amount = 0; - + if ( iNumberType ) { amount++; @@ -285,7 +285,7 @@ { TInt amount = -1; - + // coverity[var_compare_op] if ( iNumberType ) { amount++; @@ -293,6 +293,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iNumberType->Control(); } @@ -353,6 +354,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iSmallCallIndication->Control(); } @@ -383,6 +385,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iBrandImage->Control(); } @@ -393,6 +396,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iBigCallIndicator->Control(); } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/BubbleManager/Src/BMBubbleOutlookTwoLined.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookTwoLined.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookTwoLined.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -275,7 +275,7 @@ { TInt amount = -1; - + // coverity[var_compare_op] if ( iNumberType ) { amount++; @@ -283,6 +283,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iNumberType->Control(); } @@ -293,6 +294,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iSmallCallIndication->Control(); } @@ -363,6 +365,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iBrandImage->Control(); } @@ -373,6 +376,7 @@ if ( aIndex == amount ) { + // coverity[var_deref_model] return iBigCallIndicator->Control(); } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/BubbleManager/Src/BMTouchPaneButton.cpp --- a/phoneuis/BubbleManager/Src/BMTouchPaneButton.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/BubbleManager/Src/BMTouchPaneButton.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -16,16 +16,17 @@ */ #include -#include +#include #include #include #include #include -#include +#include +#include -#include "bmtouchpanebutton.h" +#include "BMTouchPaneButton.h" #include "BMTouchPaneInterface.h" -#include "bmpanic.h" +#include "BMPanic.h" const TInt KBubbleButtonText = 255; @@ -97,9 +98,7 @@ CAknButton::ConstructFromResourceL( aReader ); - // function button text color - SetTextColorIds( KAknsIIDQsnTextColors, - EAknsCIQsnTextColorsCG65 ); + SelectTextColor(); // Customize icons if ( iIconProvider ) @@ -410,3 +409,25 @@ return KAknsIIDQsnFrButtonInactive; } } + +// ----------------------------------------------------------------------------- +// Selects the correct text color. +// ----------------------------------------------------------------------------- +// +void CBubbleTouchPaneButton::SelectTextColor() + { + TAknsQsnTextColorsIndex textColorIndex( EAknsCIQsnTextColorsCG65 ); + TInt command = CommandId( EFalse ); + + if ( command == EPhoneCallComingCmdAnswer ) + { + textColorIndex = EAknsCIQsnTextColorsCG82; + } + else if ( command == EPhoneCallComingCmdReject ) + { + textColorIndex = EAknsCIQsnTextColorsCG83; + } + + // function button text color + SetTextColorIds( KAknsIIDQsnTextColors, textColorIndex ); + } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/BubbleManager/laf/BMLayout6.cpp --- a/phoneuis/BubbleManager/laf/BMLayout6.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/BubbleManager/laf/BMLayout6.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -21,8 +21,8 @@ #include "BMBubbleManager.h" #include #include -#include -#include +#include +#include #include #include diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/BubbleManager/laf/BMLayout6.h --- a/phoneuis/BubbleManager/laf/BMLayout6.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/BubbleManager/laf/BMLayout6.h Sun Mar 14 13:09:36 2010 +0000 @@ -20,7 +20,7 @@ #include #include -#include +#include /** * Layout coordinates from Application LAF * diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/ConnectUtil/inc/CCoUtlActive.h --- a/phoneuis/ConnectUtil/inc/CCoUtlActive.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/ConnectUtil/inc/CCoUtlActive.h Sun Mar 14 13:09:36 2010 +0000 @@ -21,7 +21,7 @@ #define CCOUTLACTIVE_H // INCLUDES -#include +#include #include #include #include diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/ConnectUtil/inc/CCoUtlImplementation.h --- a/phoneuis/ConnectUtil/inc/CCoUtlImplementation.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/ConnectUtil/inc/CCoUtlImplementation.h Sun Mar 14 13:09:36 2010 +0000 @@ -21,7 +21,7 @@ #define CCOUTLIMPLEMENTATION_H // INCLUDES -#include +#include #include // FORWARD DECLARATION diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/ConnectUtil/inc/CCoUtlInterface.h --- a/phoneuis/ConnectUtil/inc/CCoUtlInterface.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/ConnectUtil/inc/CCoUtlInterface.h Sun Mar 14 13:09:36 2010 +0000 @@ -86,7 +86,7 @@ }; -#include +#include #endif // CCOUTLINTERFACE_H diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/ConnectUtil/inc/CCoUtlInterface.inl --- a/phoneuis/ConnectUtil/inc/CCoUtlInterface.inl Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/ConnectUtil/inc/CCoUtlInterface.inl Sun Mar 14 13:09:36 2010 +0000 @@ -19,7 +19,7 @@ // INCLUDE FILES #include -#include +#include // CONSTANTS _LIT8( KCoUtlResolverData, "default" ); diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/ConnectUtil/src/CCoUtlActive.cpp --- a/phoneuis/ConnectUtil/src/CCoUtlActive.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/ConnectUtil/src/CCoUtlActive.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include #include diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/ConnectUtil/src/CoUtlMain.cpp --- a/phoneuis/ConnectUtil/src/CoUtlMain.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/ConnectUtil/src/CoUtlMain.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -20,7 +20,7 @@ // INCLUDE FILES #include #include -#include +#include #include "CCoUtlImplementation.h" // CONSTANTS diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/Ussd/src/UssdEditorLines.cpp --- a/phoneuis/Ussd/src/UssdEditorLines.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/Ussd/src/UssdEditorLines.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -104,9 +104,9 @@ { // Move rectangles to right position - for ( TInt i = 0; - iRects && i < iRects->Count() && i < UssdLayout::NumberOfEditorLines(); - i++ ) + for ( TInt i = 0; + i < iRects->Count() && i < UssdLayout::NumberOfEditorLines(); + i++ ) { iRects->At( i )->LayoutRect( Rect() , UssdLayout::MessageWritingLayoutElements6( i+1 ) ); @@ -119,10 +119,10 @@ // // ----------------------------------------------------------------------------- // -void CUssdEditorLines::Draw( const TRect& aRect ) const +void CUssdEditorLines::Draw( const TRect& /*aRect*/ ) const { // Take the colour from some ramdom line. - // Here it is takem from the first line. + // Here it is taken from the first line. TRgb lineColour( KRgbWhite ); @@ -151,7 +151,7 @@ // Draw row lines by clearing rectangles corresponding to row locations. TInt count( iRects->Count() ); TInt lines( UssdLayout::NumberOfEditorLines() ); - for ( TInt i = 0; iRects && i < count && i < lines; i++ ) + for ( TInt i = 0; i < count && i < lines; i++ ) { gc.Clear( iRects->At( i )->Rect() ); } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/bwins/dialeru.def --- a/phoneuis/dialer/bwins/dialeru.def Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/bwins/dialeru.def Sun Mar 14 13:09:36 2010 +0000 @@ -1,8 +1,12 @@ EXPORTS - ??1CDialer@@UAE@XZ @ 1 NONAME ; CDialer::~CDialer(void) - ??1CVideoDTMFDialer@@UAE@XZ @ 2 NONAME ; CVideoDTMFDialer::~CVideoDTMFDialer(void) - ?NewL@CDialer@@SAPAV1@ABVCCoeControl@@ABVTRect@@@Z @ 3 NONAME ; class CDialer * CDialer::NewL(class CCoeControl const &, class TRect const &) - ?NewL@CVideoDTMFDialer@@SAPAV1@ABVCCoeControl@@AAV2@ABVTRect@@@Z @ 4 NONAME ; class CVideoDTMFDialer * CVideoDTMFDialer::NewL(class CCoeControl const &, class CCoeControl &, class TRect const &) - ?NumberEntry@CDialer@@QAEPAVMNumberEntry@@XZ @ 5 NONAME ; class MNumberEntry * CDialer::NumberEntry(void) - ?SetNumberEntryObserver@CDialer@@UAEXAAVMNumberEntryObserver@@@Z @ 6 NONAME ; void CDialer::SetNumberEntryObserver(class MNumberEntryObserver &) + ?Controller@CDialer@@QAEPAVMPhoneDialerController@@XZ @ 1 NONAME ; class MPhoneDialerController * CDialer::Controller(void) + ?NumberEntry@CDialer@@QAEPAVMNumberEntry@@XZ @ 2 NONAME ; class MNumberEntry * CDialer::NumberEntry(void) + ?NewL@CVideoDTMFDialer@@SAPAV1@ABVCCoeControl@@AAV2@ABVTRect@@@Z @ 3 NONAME ; class CVideoDTMFDialer * CVideoDTMFDialer::NewL(class CCoeControl const &, class CCoeControl &, class TRect const &) + ?UpdateToolbar@CDialer@@QAEXXZ @ 4 NONAME ; void CDialer::UpdateToolbar(void) + ?SetNumberEntryObserver@CDialer@@UAEXAAVMNumberEntryObserver@@@Z @ 5 NONAME ; void CDialer::SetNumberEntryObserver(class MNumberEntryObserver &) + ?NewL@CDialer@@SAPAV1@ABVCCoeControl@@ABVTRect@@PAVMPhoneDialerController@@@Z @ 6 NONAME ; class CDialer * CDialer::NewL(class CCoeControl const &, class TRect const &, class MPhoneDialerController *) + ??1CDialer@@UAE@XZ @ 7 NONAME ; CDialer::~CDialer(void) + ?GetEasyDialingInterface@CDialer@@QBEPAVCDialingExtensionInterface@@XZ @ 8 NONAME ; class CDialingExtensionInterface * CDialer::GetEasyDialingInterface(void) const + ?SetControllerL@CDialer@@QAEXPAVMPhoneDialerController@@@Z @ 9 NONAME ; void CDialer::SetControllerL(class MPhoneDialerController *) + ??1CVideoDTMFDialer@@UAE@XZ @ 10 NONAME ; CVideoDTMFDialer::~CVideoDTMFDialer(void) diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialer.pkg --- a/phoneuis/dialer/data/dialer.pkg Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/data/dialer.pkg Sun Mar 14 13:09:36 2010 +0000 @@ -28,3 +28,16 @@ ;Files to install "\epoc32\release\armv5\urel\dialer.dll"-"z:\sys\bin\dialer.dll" "\epoc32\data\z\resource\dialer.rsc"-"z:\resource\dialer.rsc" +"\epoc32\data\z\resource\dialerkeypad.rsc"-"z:\resource\dialerkeypad.rsc" +"\epoc32\data\z\resource\dialerkeypad_cyrillic.rsc"-"z:\resource\dialerkeypad_cyrillic.rsc" +"\epoc32\data\z\resource\dialerkeypad_greek.rsc"-"z:\resource\dialerkeypad_greek.rsc" +"\epoc32\data\z\resource\dialerkeypad_hebrew.rsc"-"z:\resource\dialerkeypad_hebrew.rsc" +"\epoc32\data\z\resource\dialerkeypad_arabic.rsc"-"z:\resource\dialerkeypad_arabic.rsc" +"\epoc32\data\z\resource\dialerkeypad_farsi.rsc"-"z:\resource\dialerkeypad_farsi.rsc" +"\epoc32\data\z\resource\dialerkeypad_urdu.rsc"-"z:\resource\dialerkeypad_urdu.rsc" +"\epoc32\data\z\resource\dialerkeypad_thai.rsc"-"z:\resource\dialerkeypad_thai.rsc" +"\epoc32\data\z\resource\dialerkeypad_devanagari.rsc"-"z:\resource\dialerkeypad_devanagari.rsc" +"\epoc32\data\z\resource\dialerkeypad_chn_pinyin.rsc"-"z:\resource\dialerkeypad_chn_pinyin.rsc" +"\epoc32\data\z\resource\dialerkeypad_chn_stroke.rsc"-"z:\resource\dialerkeypad_chn_stroke.rsc" +"\epoc32\data\z\resource\dialerkeypad_chn_zhuyin.rsc"-"z:\resource\dialerkeypad_chn_zhuyin.rsc" + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialer.rss --- a/phoneuis/dialer/data/dialer.rss Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/data/dialer.rss Sun Mar 14 13:09:36 2010 +0000 @@ -32,8 +32,6 @@ #include #include - - // CONSTANTS // RESOURCE DEFINITIONS @@ -100,6 +98,5 @@ }; } - // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialer_stub.pkg --- a/phoneuis/dialer/data/dialer_stub.pkg Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/data/dialer_stub.pkg Sun Mar 14 13:09:36 2010 +0000 @@ -27,4 +27,17 @@ ;Files to install ""-"z:\sys\bin\dialer.dll" -""-"z:\resource\dialer.rsc" +""-"z:\resource\dialer.r*" +""-"z:\resource\dialerkeypad.rsc" +""-"z:\resource\dialerkeypad_cyrillic.rsc" +""-"z:\resource\dialerkeypad_greek.rsc" +""-"z:\resource\dialerkeypad_hebrew.rsc" +""-"z:\resource\dialerkeypad_arabic.rsc" +""-"z:\resource\dialerkeypad_farsi.rsc" +""-"z:\resource\dialerkeypad_urdu.rsc" +""-"z:\resource\dialerkeypad_thai.rsc" +""-"z:\resource\dialerkeypad_devanagari.rsc" +""-"z:\resource\dialerkeypad_chn_pinyin.rsc" +""-"z:\resource\dialerkeypad_chn_stroke.rsc" +""-"z:\resource\dialerkeypad_chn_zhuyin.rsc" + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialer_stub.sis Binary file phoneuis/dialer/data/dialer_stub.sis has changed diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad.rh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad.rh Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2009 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: Resource prototypes for dialer keypad labels +* +*/ +#ifndef DIALERKEYPAD_RH +#define DIALERKEYPAD_RH + +// system includes + +// constants +#define DEFAULT_KEY_1_TEXT "" +#define DEFAULT_KEY_2_TEXT "abc" +#define DEFAULT_KEY_3_TEXT "def" +#define DEFAULT_KEY_4_TEXT "ghi" +#define DEFAULT_KEY_5_TEXT "jkl" +#define DEFAULT_KEY_6_TEXT "mno" +#define DEFAULT_KEY_7_TEXT "pqrs" +#define DEFAULT_KEY_8_TEXT "tuv" +#define DEFAULT_KEY_9_TEXT "wxyz" +#define DEFAULT_KEY_0_TEXT <0xf812> +#define DEFAULT_KEY_ASTERISK_TEXT "" +#define DEFAULT_KEY_HASH_TEXT "" + +STRUCT DIALER_KEY + { + LTEXT firstRow = ""; + LTEXT secondRow = ""; + } + +STRUCT DIALER_KEYPAD + { + STRUCT keys[]; + } + + +#endif // DIALERKEYPAD_RH diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,90 @@ +/* +* Copyright (c) 2009 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: Dialer virtual keypad button text labels. +* This is the default latin variant of the file. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = DEFAULT_KEY_1_TEXT; + }, + DIALER_KEY // 2 + { + firstRow = DEFAULT_KEY_2_TEXT; + }, + DIALER_KEY // 3 + { + firstRow = DEFAULT_KEY_3_TEXT; + }, + DIALER_KEY // 4 + { + firstRow = DEFAULT_KEY_4_TEXT; + }, + DIALER_KEY // 5 + { + firstRow = DEFAULT_KEY_5_TEXT; + }, + DIALER_KEY // 6 + { + firstRow = DEFAULT_KEY_6_TEXT; + }, + DIALER_KEY // 7 + { + firstRow = DEFAULT_KEY_7_TEXT; + }, + DIALER_KEY // 8 + { + firstRow = DEFAULT_KEY_8_TEXT; + }, + DIALER_KEY // 9 + { + firstRow = DEFAULT_KEY_9_TEXT; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = DEFAULT_KEY_0_TEXT; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad_arabic.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad_arabic.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,97 @@ +/* +* Copyright (c) 2009 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: Dialer virtual keypad button text labels. +* This variant is for languages written with Arabic +* alphabets. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = DEFAULT_KEY_1_TEXT; + }, + DIALER_KEY // 2 + { + firstRow = <0x062A><0x200c><0x0628>; + secondRow = <0x062B><0x200c><0x0629>; + }, + DIALER_KEY // 3 + { + firstRow = <0x0621><0x200c><0x0627>; + }, + DIALER_KEY // 4 + { + firstRow = <0x0634><0x200c><0x0633>; + secondRow = <0x0636><0x200c><0x0635>; + }, + DIALER_KEY // 5 + { + firstRow = <0x0630><0x200c><0x062F>; + secondRow = <0x0632><0x200c><0x0631>; + }, + DIALER_KEY // 6 + { + firstRow = <0x062E><0x200c><0x062D><0x200c><0x062C>; + }, + DIALER_KEY // 7 + { + firstRow = <0x0647><0x200c><0x0646>; + secondRow = <0x064A><0x200c><0x0648>; + }, + DIALER_KEY // 8 + { + firstRow = <0x0643><0x200c><0x0642><0x200c><0x0641>; + secondRow = <0x0645><0x200c><0x0644><0x200c>; + }, + DIALER_KEY // 9 + { + firstRow = <0x0638><0x200c><0x0637>; + secondRow = <0x063A><0x200c><0x0639>; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = DEFAULT_KEY_0_TEXT; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad_chn_pinyin.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad_chn_pinyin.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,90 @@ +/* +* 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: Dialer virtual keypad button text labels. +* This is the Chinese Pinyin variant of the file. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = DEFAULT_KEY_1_TEXT; + }, + DIALER_KEY // 2 + { + firstRow = DEFAULT_KEY_2_TEXT; + }, + DIALER_KEY // 3 + { + firstRow = DEFAULT_KEY_3_TEXT; + }, + DIALER_KEY // 4 + { + firstRow = DEFAULT_KEY_4_TEXT; + }, + DIALER_KEY // 5 + { + firstRow = DEFAULT_KEY_5_TEXT; + }, + DIALER_KEY // 6 + { + firstRow = DEFAULT_KEY_6_TEXT; + }, + DIALER_KEY // 7 + { + firstRow = DEFAULT_KEY_7_TEXT; + }, + DIALER_KEY // 8 + { + firstRow = DEFAULT_KEY_8_TEXT; + }, + DIALER_KEY // 9 + { + firstRow = DEFAULT_KEY_9_TEXT; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = DEFAULT_KEY_0_TEXT; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad_chn_stroke.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad_chn_stroke.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,95 @@ +/* +* 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: Dialer virtual keypad button text labels. +* This is the Chinese Stroke variant of the file. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = <0x4e00>; + secondRow = " "; // to force two line layout + }, + DIALER_KEY // 2 + { + firstRow = <0x4e28>; + secondRow = DEFAULT_KEY_2_TEXT; + }, + DIALER_KEY // 3 + { + firstRow = <0x4e3f>; + secondRow = DEFAULT_KEY_3_TEXT; + }, + DIALER_KEY // 4 + { + firstRow = <0x4e36>; + secondRow = DEFAULT_KEY_4_TEXT; + }, + DIALER_KEY // 5 + { + firstRow = <0x4e5b>; + secondRow = DEFAULT_KEY_5_TEXT; + }, + DIALER_KEY // 6 + { + secondRow = DEFAULT_KEY_6_TEXT; + }, + DIALER_KEY // 7 + { + secondRow = DEFAULT_KEY_7_TEXT; + }, + DIALER_KEY // 8 + { + secondRow = DEFAULT_KEY_8_TEXT; + }, + DIALER_KEY // 9 + { + secondRow = DEFAULT_KEY_9_TEXT; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = DEFAULT_KEY_0_TEXT; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad_chn_zhuyin.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad_chn_zhuyin.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,96 @@ +/* +* 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: Dialer virtual keypad button text labels. +* This is the Chinese Zhuyin variant of the file. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = <0x3105><0x3106>; + secondRow = <0x3107><0x3108>; + }, + DIALER_KEY // 2 + { + firstRow = <0x3109><0x310a>; + secondRow = <0x310b><0x310c>; + }, + DIALER_KEY // 3 + { + firstRow = <0x310d><0x310e><0x310f>; + }, + DIALER_KEY // 4 + { + firstRow = <0x3110><0x3111><0x3112>; + }, + DIALER_KEY // 5 + { + firstRow = <0x3113><0x3114>; + secondRow = <0x3115><0x3116>; + }, + DIALER_KEY // 6 + { + firstRow = <0x3117><0x3118><0x3119>; + }, + DIALER_KEY // 7 + { + firstRow = <0x311a><0x311b>; + secondRow = <0x311c><0x311d>; + }, + DIALER_KEY // 8 + { + firstRow = <0x311e><0x311f>; + secondRow = <0x3120><0x3121>; + }, + DIALER_KEY // 9 + { + firstRow = <0x3122><0x3123>; + secondRow = <0x3124><0x3125><0x3126>; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = <0x3127><0x3128><0x3129>; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad_cyrillic.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad_cyrillic.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2009 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: Dialer virtual keypad button text labels. +* This variant is for languages written with Cyrillic +* alphabets. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = DEFAULT_KEY_1_TEXT; + }, + DIALER_KEY // 2 + { + firstRow = DEFAULT_KEY_2_TEXT; + secondRow = <0x0430><0x0431><0x0432><0x0433>; + }, + DIALER_KEY // 3 + { + firstRow = DEFAULT_KEY_3_TEXT; + secondRow = <0x0434><0x0435><0x0436><0x0437>; + }, + DIALER_KEY // 4 + { + firstRow = DEFAULT_KEY_4_TEXT; + secondRow = <0x0438><0x0439><0x043A><0x043B>; + }, + DIALER_KEY // 5 + { + firstRow = DEFAULT_KEY_5_TEXT; + secondRow = <0x043C><0x043D><0x043E><0x043F>; + }, + DIALER_KEY // 6 + { + firstRow = DEFAULT_KEY_6_TEXT; + secondRow = <0x0440><0x0441><0x0442><0x0443>; + }, + DIALER_KEY // 7 + { + firstRow = DEFAULT_KEY_7_TEXT; + secondRow = <0x0444><0x0445><0x0446><0x0447>; + }, + DIALER_KEY // 8 + { + firstRow = DEFAULT_KEY_8_TEXT; + secondRow = <0x0448><0x0449><0x044A><0x044B>; + }, + DIALER_KEY // 9 + { + firstRow = DEFAULT_KEY_9_TEXT; + secondRow = <0x044C><0x044D><0x044E><0x044F>; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = DEFAULT_KEY_0_TEXT; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad_devanagari.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad_devanagari.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2009 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: Dialer virtual keypad button text labels. +* This variant is for languages written with Devanagari +* alphabets. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = DEFAULT_KEY_1_TEXT; + }, + DIALER_KEY // 2 + { + firstRow = DEFAULT_KEY_2_TEXT; + secondRow = <0x0905><0x002D><0x090A>; + }, + DIALER_KEY // 3 + { + firstRow = DEFAULT_KEY_3_TEXT; + secondRow = <0x090F><0x002D><0x0914>; + }, + DIALER_KEY // 4 + { + firstRow = DEFAULT_KEY_4_TEXT; + secondRow = <0x0915><0x002D><0x0919>; + }, + DIALER_KEY // 5 + { + firstRow = DEFAULT_KEY_5_TEXT; + secondRow = <0x091A><0x002D><0x091E>; + }, + DIALER_KEY // 6 + { + firstRow = DEFAULT_KEY_6_TEXT; + secondRow = <0x091F><0x002D><0x0923>; + }, + DIALER_KEY // 7 + { + firstRow = DEFAULT_KEY_7_TEXT; + secondRow = <0x0924><0x002D><0x0928>; + }, + DIALER_KEY // 8 + { + firstRow = DEFAULT_KEY_8_TEXT; + secondRow = <0x092A><0x002D><0x092E>; + }, + DIALER_KEY // 9 + { + firstRow = DEFAULT_KEY_9_TEXT; + secondRow = <0x092F><0x002D><0x0939>; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = DEFAULT_KEY_0_TEXT; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad_farsi.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad_farsi.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2009 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: Dialer virtual keypad button text labels. +* This variant is for languages written with Farsi +* alphabets. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = DEFAULT_KEY_1_TEXT; + }, + DIALER_KEY // 2 + { + firstRow = <0x067E><0x200c><0x0628>; + secondRow = <0x062B><0x200c><0x062A>; + }, + DIALER_KEY // 3 + { + firstRow = <0x0624><0x200c><0x0622><0x200c><0x0627>; + secondRow = <0x0621><0x200c><0x0626>; + }, + DIALER_KEY // 4 + { + firstRow = <0x0634><0x200c><0x0633>; + secondRow = <0x0636><0x200c><0x0635>; + }, + DIALER_KEY // 5 + { + firstRow = <0x0631><0x200c><0x0630><0x200c><0x062F>; + secondRow = <0x0698><0x200c><0x0632>; + }, + DIALER_KEY // 6 + { + firstRow = <0x0686><0x200c><0x062C>; + secondRow = <0x062E><0x200c><0x062D>; + }, + DIALER_KEY // 7 + { + firstRow = <0x0648><0x200c><0x0646>; + secondRow = <0x06CC><0x200c><0x0647>; + }, + DIALER_KEY // 8 + { + firstRow = <0x06A9><0x200c><0x0642><0x200c><0x0641>; + secondRow = <0x0645><0x200c><0x0644><0x200c><0x06AF>; + }, + DIALER_KEY // 9 + { + firstRow = <0x0638><0x200c><0x0637>; + secondRow = <0x063A><0x200c><0x0639>; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = DEFAULT_KEY_0_TEXT; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad_greek.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad_greek.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2009 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: Dialer virtual keypad button text labels. +* This variant is for languages written with Greek +* alphabets. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = DEFAULT_KEY_1_TEXT; + }, + DIALER_KEY // 2 + { + firstRow = DEFAULT_KEY_2_TEXT; + secondRow = <0x03B1><0x03B2><0x03B3>; + }, + DIALER_KEY // 3 + { + firstRow = DEFAULT_KEY_3_TEXT; + secondRow = <0x03B4><0x03B5><0x03B6>; + }, + DIALER_KEY // 4 + { + firstRow = DEFAULT_KEY_4_TEXT; + secondRow = <0x03B7><0x03B8><0x03B9>; + }, + DIALER_KEY // 5 + { + firstRow = DEFAULT_KEY_5_TEXT; + secondRow = <0x03BA><0x03BB><0x03BC>; + }, + DIALER_KEY // 6 + { + firstRow = DEFAULT_KEY_6_TEXT; + secondRow = <0x03BD><0x03BE><0x03BF>; + }, + DIALER_KEY // 7 + { + firstRow = DEFAULT_KEY_7_TEXT; + secondRow = <0x03C0><0x03C1><0x03C3><0x03C2>; + }, + DIALER_KEY // 8 + { + firstRow = DEFAULT_KEY_8_TEXT; + secondRow = <0x03C4><0x03C5><0x03C6>; + }, + DIALER_KEY // 9 + { + firstRow = DEFAULT_KEY_9_TEXT; + secondRow = <0x03C7><0x03C8><0x03C9>; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = DEFAULT_KEY_0_TEXT; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad_hebrew.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad_hebrew.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2009 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: Dialer virtual keypad button text labels. +* This variant is for languages written with Hebrew +* alphabets. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = DEFAULT_KEY_1_TEXT; + }, + DIALER_KEY // 2 + { + firstRow = DEFAULT_KEY_2_TEXT; + secondRow = <0x05D5><0x05D4><0x05D3>; + }, + DIALER_KEY // 3 + { + firstRow = DEFAULT_KEY_3_TEXT; + secondRow = <0x05D2><0x05D1><0x05D0>; + }, + DIALER_KEY // 4 + { + firstRow = DEFAULT_KEY_4_TEXT; + secondRow = <0x05E0><0x05DE>; + }, + DIALER_KEY // 5 + { + firstRow = DEFAULT_KEY_5_TEXT; + secondRow = <0x05DC><0x05DB><0x05D9>; + }, + DIALER_KEY // 6 + { + firstRow = DEFAULT_KEY_6_TEXT; + secondRow = <0x05D8><0x05D7><0x05D6>; + }, + DIALER_KEY // 7 + { + firstRow = DEFAULT_KEY_7_TEXT; + secondRow = <0x05EA><0x05E9><0x05E8>; + }, + DIALER_KEY // 8 + { + firstRow = DEFAULT_KEY_8_TEXT; + secondRow = <0x05E7><0x05E6>; + }, + DIALER_KEY // 9 + { + firstRow = DEFAULT_KEY_9_TEXT; + secondRow = <0x05E4><0x05E2><0x05E1>; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = DEFAULT_KEY_0_TEXT; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad_thai.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad_thai.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,100 @@ +/* +* Copyright (c) 2009 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: Dialer virtual keypad button text labels. +* This variant is for languages written with Thai +* alphabets. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = DEFAULT_KEY_1_TEXT; + secondRow = <0x0E01><0x002D><0x0E05>; + }, + DIALER_KEY // 2 + { + firstRow = DEFAULT_KEY_2_TEXT; + secondRow = <0x0E06><0x002D><0x0E09>; + }, + DIALER_KEY // 3 + { + firstRow = DEFAULT_KEY_3_TEXT; + secondRow = <0x0E0A><0x002D><0x0E0D>; + }, + DIALER_KEY // 4 + { + firstRow = DEFAULT_KEY_4_TEXT; + secondRow = <0x0E0E><0x002D><0x0E13>; + }, + DIALER_KEY // 5 + { + firstRow = DEFAULT_KEY_5_TEXT; + secondRow = <0x0E14><0x002D><0x0E18>; + }, + DIALER_KEY // 6 + { + firstRow = DEFAULT_KEY_6_TEXT; + secondRow = <0x0E19><0x002D><0x0E1D>; + }, + DIALER_KEY // 7 + { + firstRow = DEFAULT_KEY_7_TEXT; + secondRow = <0x0E1E><0x002D><0x0E22>; + }, + DIALER_KEY // 8 + { + firstRow = DEFAULT_KEY_8_TEXT; + secondRow = <0x0E23><0x002D><0x0E29>; + }, + DIALER_KEY // 9 + { + firstRow = DEFAULT_KEY_9_TEXT; + secondRow = <0x0E2A><0x002D><0x0E2E>; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = DEFAULT_KEY_0_TEXT; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/data/dialerkeypad_urdu.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/data/dialerkeypad_urdu.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,98 @@ +/* +* Copyright (c) 2009 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: Dialer virtual keypad button text labels. +* This variant is for languages written with Urdu +* alphabets. +* +*/ + +// NOTE: It's mandatory that all variated keypad resources have +// the same resouce identifier and same structure. Same interface +// is used for all of them! + +// RESOURCE IDENTIFIER +NAME DIKP + +#include +#include + +#include "dialerkeypad.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE DIALER_KEYPAD r_dialer_keypad + { + keys = + { + DIALER_KEY // 1 + { + firstRow = DEFAULT_KEY_1_TEXT; + }, + DIALER_KEY // 2 + { + firstRow = <0x062A><0x200c><0x067E><0x200c><0x0628>; + secondRow = <0x062B><0x200c><0x0679>; + }, + DIALER_KEY // 3 + { + firstRow = <0x0621><0x200c><0x0622><0x200c><0x0627>; + }, + DIALER_KEY // 4 + { + firstRow = <0x0634><0x200c><0x0633>; + secondRow = <0x0636><0x200c><0x0635>; + }, + DIALER_KEY // 5 + { + firstRow = <0x0631><0x200c><0x0630><0x200c><0x0688><0x200c><0x062F>; + secondRow = <0x0698><0x200c><0x0632><0x200c><0x0691>; + }, + DIALER_KEY // 6 + { + firstRow = <0x0686><0x200c><0x062C>; + secondRow = <0x062E><0x200c><0x062D>; + }, + DIALER_KEY // 7 + { + firstRow = <0x06BE><0x200c><0x0648><0x200c><0x0646>; + secondRow = <0x06D2><0x200c><0x06CC>; + }, + DIALER_KEY // 8 + { + firstRow = <0x06A9><0x200c><0x0642><0x200c><0x0641>; + secondRow = <0x0645><0x200c><0x0644><0x200c><0x06AF>; + }, + DIALER_KEY // 9 + { + firstRow = <0x0638><0x200c><0x0637>; + secondRow = <0x063A><0x200c><0x0639>; + }, + DIALER_KEY // * + { + firstRow = DEFAULT_KEY_ASTERISK_TEXT; + }, + DIALER_KEY // 0 + { + firstRow = DEFAULT_KEY_0_TEXT; + }, + DIALER_KEY // # + { + firstRow = DEFAULT_KEY_HASH_TEXT; + } + }; + } + +// End Of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/eabi/dialeru.def --- a/phoneuis/dialer/eabi/dialeru.def Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/eabi/dialeru.def Sun Mar 14 13:09:36 2010 +0000 @@ -3,11 +3,15 @@ _ZN16CVideoDTMFDialerD0Ev @ 2 NONAME _ZN16CVideoDTMFDialerD1Ev @ 3 NONAME _ZN16CVideoDTMFDialerD2Ev @ 4 NONAME - _ZN7CDialer11NumberEntryEv @ 5 NONAME - _ZN7CDialer22SetNumberEntryObserverER20MNumberEntryObserver @ 6 NONAME - _ZN7CDialer4NewLERK11CCoeControlRK5TRect @ 7 NONAME - _ZN7CDialerD0Ev @ 8 NONAME - _ZN7CDialerD1Ev @ 9 NONAME - _ZN7CDialerD2Ev @ 10 NONAME - _ZThn52_N7CDialer22SetNumberEntryObserverER20MNumberEntryObserver @ 11 NONAME ; ## + _ZN7CDialer10ControllerEv @ 5 NONAME + _ZN7CDialer11NumberEntryEv @ 6 NONAME + _ZN7CDialer13UpdateToolbarEv @ 7 NONAME + _ZN7CDialer14SetControllerLEP22MPhoneDialerController @ 8 NONAME + _ZN7CDialer22SetNumberEntryObserverER20MNumberEntryObserver @ 9 NONAME + _ZN7CDialer4NewLERK11CCoeControlRK5TRectP22MPhoneDialerController @ 10 NONAME + _ZN7CDialerD0Ev @ 11 NONAME + _ZN7CDialerD1Ev @ 12 NONAME + _ZN7CDialerD2Ev @ 13 NONAME + _ZNK7CDialer23GetEasyDialingInterfaceEv @ 14 NONAME + _ZThn52_N7CDialer22SetNumberEntryObserverER20MNumberEntryObserver @ 15 NONAME diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/group/bld.inf --- a/phoneuis/dialer/group/bld.inf Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/group/bld.inf Sun Mar 14 13:09:36 2010 +0000 @@ -30,6 +30,8 @@ ../rom/dialer.iby CORE_APP_LAYER_IBY_EXPORT_PATH(dialer.iby) +../rom/dialer_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(dialer_variant.iby) + PRJ_EXTENSIONS START EXTENSION s60/mifconv OPTION TARGETFILE dialer.mif diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/group/dialer.mmp --- a/phoneuis/dialer/group/dialer.mmp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/group/dialer.mmp Sun Mar 14 13:09:36 2010 +0000 @@ -39,15 +39,22 @@ SOURCE cdialer.cpp SOURCE cdialercontainerbase.cpp SOURCE cdialerkeypadcontainer.cpp +SOURCE cdialerkeypadbutton.cpp SOURCE cdialernumberentry.cpp SOURCE cdialervideocontainer.cpp SOURCE cvideodtmfdialer.cpp +SOURCE cdialingextensionobserver.cpp +SOURCE cdialertoolbarcontainer.cpp +SOURCE cdialerkeypadlabelmanager.cpp +SOURCE cdialercenrepwrapper.cpp USERINCLUDE ../inc USERINCLUDE ../data APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE ../../../inc + LIBRARY euser.lib eikcore.lib estor.lib etext.lib LIBRARY cone.lib ws32.lib bmpanim.lib LIBRARY eikcoctl.lib fbscli.lib bafl.lib @@ -60,5 +67,61 @@ LIBRARY efsrv.lib LIBRARY aknlayout2.lib touchfeedback.lib +LIBRARY ecom.lib +LIBRARY CommonEngine.lib +LIBRARY PtiEngine.lib +LIBRARY centralrepository.lib +LIBRARY cenrepnotifhandler.lib + +// Keypad resources. Header is generated only for the +// default variant, all the variants use the same header. +START RESOURCE ../data/dialerkeypad.rss +TARGETPATH RESOURCE_FILES_DIR +HEADER +END // RESOURCE + +START RESOURCE ../data/dialerkeypad_cyrillic.rss +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE + +START RESOURCE ../data/dialerkeypad_greek.rss +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE + +START RESOURCE ../data/dialerkeypad_hebrew.rss +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE + +START RESOURCE ../data/dialerkeypad_arabic.rss +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE + +START RESOURCE ../data/dialerkeypad_farsi.rss +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE + +START RESOURCE ../data/dialerkeypad_urdu.rss +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE + +START RESOURCE ../data/dialerkeypad_thai.rss +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE + +START RESOURCE ../data/dialerkeypad_devanagari.rss +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE + +START RESOURCE ../data/dialerkeypad_chn_pinyin.rss +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE + +START RESOURCE ../data/dialerkeypad_chn_zhuyin.rss +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE + +START RESOURCE ../data/dialerkeypad_chn_stroke.rss +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/group/dialerstub.mmp --- a/phoneuis/dialer/group/dialerstub.mmp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/group/dialerstub.mmp Sun Mar 14 13:09:36 2010 +0000 @@ -67,5 +67,6 @@ LIBRARY bitgdi.lib LIBRARY egul.lib LIBRARY efsrv.lib +LIBRARY ecom.lib // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/group/iconlist.txt --- a/phoneuis/dialer/group/iconlist.txt Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/group/iconlist.txt Sun Mar 14 13:09:36 2010 +0000 @@ -1,12 +1,1 @@ --c8,8 qgn_indi_dialer_eight --c8,8 qgn_indi_dialer_five --c8,8 qgn_indi_dialer_four --c8,8 qgn_indi_dialer_hash --c8,8 qgn_indi_dialer_nine --c8,8 qgn_indi_dialer_one --c8,8 qgn_indi_dialer_prefix --c8,8 qgn_indi_dialer_seven --c8,8 qgn_indi_dialer_six --c8,8 qgn_indi_dialer_three --c8,8 qgn_indi_dialer_two --c8,8 qgn_indi_dialer_zero \ No newline at end of file +-c8,8 qgn_indi_dialer_voicemail diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/inc/cdialer.h --- a/phoneuis/dialer/inc/cdialer.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/inc/cdialer.h Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007 - 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" @@ -37,6 +37,10 @@ class CEikonEnv; class CAknEdwinState; class MNumberEntryObserver; +class CDialingExtensionInterface; +class CDialingExtensionObserver; +class CDialerToolbarContainer; +class MPhoneDialerController; // CLASS DECLARATION @@ -114,7 +118,7 @@ delete dialer; * */ -NONSHARABLE_CLASS(CDialer) : public CCoeControl, public MNumberEntry +NONSHARABLE_CLASS(CDialer) : public CCoeControl, public MNumberEntry, public MCoeControlObserver // easy dialing change { public: // Constructors and destructor @@ -122,10 +126,12 @@ * Two phase constructor * @param aContainer Parent container * @param aRect Area to use for dialer + * @param aController Dialer controller providing state data for dialer * @return New instance of Dialer */ IMPORT_C static CDialer* NewL( const CCoeControl& aContainer, - const TRect& aRect ); + const TRect& aRect, + MPhoneDialerController* aController ); /** * Destructor. @@ -144,6 +150,32 @@ * Set number entry observer. */ IMPORT_C void SetNumberEntryObserver( MNumberEntryObserver& aObserver ); + + /** + * Sets controller of the dialer. Controller is responsible of providing + * toolbar functions, text prompt, etc, as appropriate for the curret dialer state. + */ + IMPORT_C void SetControllerL( MPhoneDialerController* aController ); + + /** + * Gets current controller of the dialer. + */ + IMPORT_C MPhoneDialerController* Controller(); + + /** + * Returns pointer to easydialing interface. This can be NULL if + * easydialing is not present in device, so value must be checked + * before using the interface. + * + * @return Pointer to easydialing interface + */ + IMPORT_C CDialingExtensionInterface* GetEasyDialingInterface() const; + + /** + * Toolbar of the easydialing layout is owned by the Dialer. + * Calling this methods updates status of its buttons. + */ + IMPORT_C void UpdateToolbar(); public: // from MNumberEntry @@ -179,9 +211,9 @@ /** * Get Number Entry Text. - * @param aDesC The text. + * @param aDes The text. */ - void GetTextFromNumberEntry( TDes& aDesC ); + void GetTextFromNumberEntry( TDes& aDes ); /** * Removes NE and empties the buffer. @@ -223,6 +255,10 @@ */ void EnableTactileFeedback( const TBool aEnable ); + private: // Functions from MCoeControlObserver + + void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ); + private: // Functions from CCoeControl /** @@ -287,9 +323,11 @@ * 2nd phase constructor. * @param aContainer Parent container * @param aRect Area to use for dialer + * @param aController Dialer controller providing state data for dialer */ - void ConstructL( const CCoeControl& aContainer , - const TRect& aRect ); + void ConstructL( const CCoeControl& aContainer, + const TRect& aRect, + MPhoneDialerController* aController ); /** * Load resource file. @@ -319,6 +357,26 @@ */ void UpdateVkbEditorFlagsL(); + /** + * Loads easydialing plugin. If loading fails (for instance when + * easydialing feature flag is not enabled in the device), + * iEasyDialer will be NULL after this function returns. + */ + void LoadEasyDialingPlugin(); + + /** + * Checks if Easy dialing is available, allowed, and currently enabled. + * + * @return ETrue if Easy Dialing is enabked + */ + TBool EasyDialingEnabled() const; + + /** + * Layout number entry component. The used layout depends on + * the availability and state of Easy dialing. + */ + void LayoutNumberEntry( const TRect& aParent, TInt aVariety ); + private: // Data // Keypad container - owned @@ -327,9 +385,6 @@ // Number entry container - owned CDialerNumberEntry* iNumberEntry; - // Parent container - const CCoeControl* iParentControl; - // Is Number entry (e.g. dialer) being used at the moment TBool iIsUsed; @@ -342,6 +397,30 @@ // Is virtual key board open TBool iVirtualKeyBoardOpen; + /** + * Easydialing plugin. This can be NULL if easydialing feature flag + * is not enabled in the device. + * Own. + */ + CDialingExtensionInterface* iEasyDialer; + + /** + * Observer for Easydialing. + * Own. + */ + CDialingExtensionObserver* iDialingExtensionObserver; + + /** + * Toolbar used in Easy dialing layout. + * Own. + */ + CDialerToolbarContainer* iToolbar; + + /** + * Controller rules the mode of the Dialer (e.g. normal, DTMF, restricted...) + * Not owned. + */ + MPhoneDialerController* iController; }; #endif // CDIALER_H diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/inc/cdialercenrepwrapper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/inc/cdialercenrepwrapper.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,110 @@ +/* +* 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: Wrapper class for Central Repository handling. +* Using this helper class is most helpful when one class needs +* to observe state changes in several repositories. +*/ + +#ifndef DIALERCENREPWRAPPER_H +#define DIALERCENREPWRAPPER_H + +// INCLUDES +#include +#include +#include + +// CALLBACK INTERFACE +NONSHARABLE_CLASS( MDialerCenRepObserver ) + { +public: + virtual void HandleRepositoryChange( TUid aRepository, TUint32 aKey ) = 0; + }; + +// FORWARD DECLARATIONS +class CRepository; + +// CLASS DECLARATION + +/** + * CDialerCenRepWrapper + * + */ +NONSHARABLE_CLASS( CDialerCenRepWrapper ): + public CBase, public MCenRepNotifyHandlerCallback + { +public: // constructors and destructor + + /** + * Destructor. + */ + ~CDialerCenRepWrapper(); + + /** + * Two-phased constructor. + */ + static CDialerCenRepWrapper* NewL( + MDialerCenRepObserver& aObserver, TUid aRepository ); + + /** + * Two-phased constructor. + */ + static CDialerCenRepWrapper* NewLC( + MDialerCenRepObserver& aObserver, TUid aRepository ); + +private: // consturctors + + /** + * Constructor for performing 1st stage construction + */ + CDialerCenRepWrapper( + MDialerCenRepObserver& aObserver, TUid aRepository ); + + /** + * Symbian default constructor for performing 2nd stage construction + */ + void ConstructL(); + +public: // from MCenRepNotifyHandlerCallback + + /** + * @see MCenRepNotifyHandlerCallback + */ + void HandleNotifyGeneric( TUint32 aId ); + +public: // new methods + + /** + * Get integer value from the repository. + * @see CRepository::Get + */ + TInt Get( TUint32 aKey, TInt& aValue ); + + // Getters for other data types may be added here if needed + +private: // data + + /** Observer is notified on repository changes */ + MDialerCenRepObserver& iObserver; + + /** UID of the repository */ + TUid iRepositoryId; + + /** Repository handle. Owned. */ + CRepository* iRepository; + + /** Helper for reacting to repository changes. */ + CCenRepNotifyHandler* iCenRepNotifyHandler; + }; + +#endif // DIALERCENREPWRAPPER_H diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/inc/cdialerkeypadbutton.h --- a/phoneuis/dialer/inc/cdialerkeypadbutton.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/inc/cdialerkeypadbutton.h Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2008, 2009 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" @@ -21,6 +21,9 @@ #include #include +#include "dialercommon.h" + +const TMifDialer KDialerNoIcon = EMbmDialerLastElement; // CLASS DECLARATION @@ -30,39 +33,185 @@ * @lib dialer.lib * @since S60 v5.0 */ -NONSHARABLE_CLASS( CDialerKeyPadButton ) : public CBase +NONSHARABLE_CLASS( CDialerKeyPadButton ) : public CAknButton { public: - CDialerKeyPadButton(); - + /** + * @param aNumberLabel The number (etc) of the key. + * Reference must remain valid until reset with SetNumLabel + * @parem aPrimaryAlphaLabel The first row of alphabets of the key. + * Reference must remain valid until reset with SetPrimaryAlphaLabel + * @param aSecondaryAlphaLabel The second row of alphabets of the key. + * Reference must remain valid until reset with SetSecondaryAlphaLabel + * @param aScanCode The button scanCode. + * @param aKeyCode The button keyCode. + * @param aButtonIconId The icon for the normal state. + * @param aButtonIconMaskId The icon mask for the normal state. + * @param aFlags CAknButton flags + */ + static CDialerKeyPadButton* NewLC( const TDesC& aNumberLabel, + const TDesC& aPrimaryAlphaLabel, + const TDesC& aSecondaryAlphaLabel, + TInt aScanCode, + TInt aKeyCode, + TMifDialer aButtonIconId, + TMifDialer aButtonIconMaskId, + TInt aFlags ); + + /** + * Destructor + */ ~CDialerKeyPadButton(); - + public: - CCoeControl* Control() const { return iButton; }; + + /** + * Scan code associated with the key. + */ TInt ScanCode() const; + + /** + * Key code associated with the key + */ TInt KeyCode() const; - void CreateButtonL( const TInt aScanCode, - const TInt aKeyCode, - const TMifDialer aButtonIcon, - const TMifDialer aButtonIconMask ); - void SetIconSize( TSize& aSize ); - void HandleResourceChange( TInt aType ); - void MapDialerIconToSkinIcon( const TInt aDialerIcon, - TAknsItemID& aItemId ) const; + + /** + * Set layout variety to be used + */ + void SetVariety( TInt aVariety ); + + /** + * Set operation mode of the keypad. Operation mode has rules, + * which labels are shown and how they are laid out. + */ + void SetOperationMode( TDialerOperationMode aMode ); + + /** + * Set number label for the key. + * @param aLabel Reference to new label text. The reference must remain + * valid until reset or this button is deleted. + */ + void SetNumLabel( const TDesC& aLabel ); + + /** + * Set first row alphabet label. + * @param aLabel Reference to new label text. The reference must remain + * valid until reset or this button is deleted. + */ + void SetPrimaryAlphaLabel( const TDesC& aLabel ); + + /** + * Set second row alphabet label for the key. + * @param aLabel Reference to new label text. The reference must remain + * valid until reset or this button is deleted. + */ + void SetSecondaryAlphaLabel( const TDesC& aLabel ); + + /** + * Enable or disable audio feedback for this button. + * @param aEnable ETrue if audio feedback should be enabled. + * EFalse otherwise. + */ void EnableAudioFeedback( const TBool aEnable ); + public: //from CAknButton + + /** + * @see CAknButton + */ + void HandleResourceChange( TInt aType ); + + protected: // from CAknButton + + /** + * @see CAknButton + */ + void Draw(const TRect& aRect) const; + + /** + * @see CAknButton + */ + void SizeChanged(); + private: + void UpdateIconL(); + void DrawIconAndText( CWindowGc& aGc ) const; + void GetTextColors( TRgb& aPenColor, TRgb& aBrushColor ) const; + void MapDialerIconToSkinIcon( TInt aDialerIcon, + TAknsItemID& aItemId ) const; + + private: // constructors + + /** + * C++ constructor + * + * @param aNumberLabel The number (etc) of the key. + * @param aPrimaryAlphaLabel The first row of alphabets of the key. + * @param aSecondaryAlphaLabel The second row of alphabets of the key. + * @param aScanCode The button scanCode. + * @param aKeyCode The button keyCode. + * @param aButtonIconId The icon for the normal state. + * @param aButtonIconMaskId The mask icon for the normal state. + * @param aFlags CAknButton flags + */ + CDialerKeyPadButton( const TDesC& aNumberLabel, + const TDesC& aPrimaryAlphaLabel, + const TDesC& aSecondaryAlphaLabel, + TInt aScanCode, + TInt aKeyCode, + TMifDialer aButtonIconId, + TMifDialer aButtonIconMaskId, + TInt aFlags ); + + /** + * Symbian 2nd phase constructor. + * + * @param aFlags Flags of the button. + */ + void ConstructL( TInt aFlags ); private: // data - - CAknButton* iButton; - + + /** Scan code of the key */ TInt iScanCode; + + /** Key code of the key */ TInt iKeyCode; - TMifDialer iButtonIcon; - TMifDialer iButtonIconMask; + + /** ID of the icon bitmap */ + TMifDialer iButtonIconId; + + /** ID of the icon mask */ + TMifDialer iButtonIconMaskId; + + /** Layout variety to use */ + TInt iVariety; + + /** Operation mode of the keypad */ + TDialerOperationMode iOperationMode; + + /** Layout for number */ + TAknLayoutText iNumberLayout; + + /** Layout for primary row of alphabets */ + TAknLayoutText iPrimaryAlphaLayout; + + /** Layout for secondar row of alphabets */ + TAknLayoutText iSecondaryAlphaLayout; + + /** Label containing the number or hash or asterisk */ + TPtrC iNumberLabel; + + /** Label containing first row of alphabets */ + TPtrC iPrimaryAlphaLabel; + + /** Label containing second row of alphabets */ + TPtrC iSecondaryAlphaLabel; + + /** Rect inside the button where icon is drawn (if available) */ + TRect iIconRect; }; #endif // C_CDIALERKEYPADBUTTON_H diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/inc/cdialerkeypadcontainer.h --- a/phoneuis/dialer/inc/cdialerkeypadcontainer.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/inc/cdialerkeypadcontainer.h Sun Mar 14 13:09:36 2010 +0000 @@ -26,12 +26,14 @@ #include #include "cdialercontainerbase.h" +#include "cdialerkeypadlabelmanager.h" // CONSTANTS // FORWARD DECLARATIONS class CDialerKeyPadButton; + // CLASS DECLARATION /** @@ -41,7 +43,8 @@ * @since S60 v5.0 */ NONSHARABLE_CLASS(CDialerKeyPadContainer) : public CDialerContainerBase, - public MCoeForegroundObserver + public MCoeForegroundObserver, + public MDialerKeyPadLabelManagerCallback { public: // Constructors and destructor @@ -69,6 +72,19 @@ void EnableTactileFeedback( const TBool aEnable ); + // moved from private to public + /** + * @see CCoeControl + */ + void MakeVisible( TBool aVisible ); + + /** + * Sets the operation mode. New mode takes effect once the + * size of the component is reset. + * @param aOperatingMode New operation mode. + */ + void SetOperationMode( TDialerOperationMode aOperatingMode ); + private: // Functions from base classes /** @@ -92,11 +108,6 @@ void HandleResourceChange( TInt aType ); /** - * @see CCoeControl - */ - void MakeVisible( TBool aVisible ); - - /** * @see MCoeControlObserver */ void HandleControlEventL( CCoeControl* aControl,TCoeEvent aEventType ); @@ -111,6 +122,10 @@ */ void HandleLosingForeground(); + /** + * @see MDialerKeyPadLabelManagerCallback + */ + void KeyLabelsChanged(); private: // From CDialerContainerBase @@ -140,6 +155,11 @@ void SetPhoneLayout(); /** + * Set layout in Easy Dialing mode + */ + void SetEasyDialingLayout(); + + /** * Set layout in Video DTMF mode */ void SetVideoLayout(); @@ -149,7 +169,6 @@ */ void CreateButtonsL(); - private: // Data TDialerOperationMode iOperatingMode; @@ -174,6 +193,11 @@ * Stores last pointer event. */ TPointerEvent iPointerEvent; + + /** + * Helper to manage keypad button labels + */ + CDialerKeyPadLabelManager* iKeyLabelManager; }; #endif // CDIALERKEYPADCONTAINER_H diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/inc/cdialerkeypadlabelmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/inc/cdialerkeypadlabelmanager.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,222 @@ +/* +* Copyright (c) 2009, 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: Helper class to handle virtual keypad text labels +* +*/ + +#ifndef CDIALERKEYPADLABELMANAGER_H +#define CDIALERKEYPADLABELMANAGER_H + +// INCLUDES +#include +#include +#include "cdialercenrepwrapper.h" + + +// FORWARD DECLARATIONS +class CPtiEngine; +class CEnvironmentChangeNotifier; + + +// CALLBACK INTERFACE +NONSHARABLE_CLASS( MDialerKeyPadLabelManagerCallback ) + { +public: + /** + * This event is given when change in system settings has + * caused key label texts to change. All the TPtrC descriptors + * previously returned by CDialerKeyPadLabelManager become + * dangling references when this happens and they must not + * be used after this method is called. + */ + virtual void KeyLabelsChanged() = 0; + }; + + +// CLASS DECLARATION + +/** + * CDialerKeyPadLabelManager + * + */ +NONSHARABLE_CLASS( CDialerKeyPadLabelManager ) : public CBase, public MDialerCenRepObserver + { +public: // Constructors and destructor + + /** + * Destructor. + */ + ~CDialerKeyPadLabelManager(); + + /** + * Two-phased constructor. + */ + static CDialerKeyPadLabelManager* NewL( CCoeEnv& aCoeEnv, + MDialerKeyPadLabelManagerCallback& aObserver ); + + /** + * Two-phased constructor. + */ + static CDialerKeyPadLabelManager* NewLC( CCoeEnv& aCoeEnv, + MDialerKeyPadLabelManagerCallback& aObserver ); + +private: // consturctors + + /** + * Constructor for performing 1st stage construction + */ + CDialerKeyPadLabelManager( CCoeEnv& aCoeEnv, + MDialerKeyPadLabelManagerCallback& aObserver ); + + /** + * Symbian default constructor for performing 2nd stage construction + */ + void ConstructL(); + +public: // methods + + /** + * Get number label for the button. + * @return Reference to the number text in current global number mode. + * The reference is valid until this label manager is deleted or + * global number mode is changed. Callback KeyLabelsChanged() + * is given to observer in the latter case. + */ + TPtrC ButtonNumLabel( TInt aIndex ) const; + + /** + * Get first row alphabet label for the button + * @return Reference to descriptor containing text for the first + * row of alphabets to be shown on the key. The reference is + * valid until this label manager is deleted or input language + * is changed. Callback KeyLabelsChanged() + * is given to observer in the latter case. + */ + TPtrC ButtonFirstAlphaLabel( TInt aIndex ) const; + + /** + * Get second row alphabet label for the button + * @return Reference to descriptor containing text for the first + * row of alphabets to be shown on the key. The reference is + * valid until this label manager is deleted or input language + * is changed. Callback KeyLabelsChanged() + * is given to observer in the latter case. + */ + TPtrC ButtonSecondAlphaLabel( TInt aIndex ) const; + +public: // from MDialerCenRepObserver + + /** + * Handle change in one of the observed repositories. + */ + void HandleRepositoryChange( TUid aRepository, TUint32 aId ); + +private: // methods + + /** + * Handle environment change event. We are interested about digit + * type changes in locale data. + */ + void HandleEnvChange(); + + /** + * Static wrapper for HandleEnvChange() function to be passed in TCallBack object. + */ + static TInt EnvChangeCallback( TAny* aSelfPtr ); + + /** + * Update button text labels to match current input and UI language. + */ + void UpdateTextLabelsL(); + + /** + * Update button number labels to use current global number mode. + */ + void UpdateNumLabelsL(); + + /** + * Get the full path of the keypad resource file to be used in current situation. + * @param aFileName On return, contains the file name. Caller is responsible + * of supplying large enough buffer. Maximum path length + * in Symbian is 256 characters. + */ + void GetResourceFileNameL( TDes& aFileName ); + + /** + * Returns code of the script to be used in current situation. + * It depends on the current input language, current UI language, and all + * available input languages on the device. + */ + TInt LabelScriptToUseL() const; + + /** + * Returns code of the Chinese script to be used in key labels. + * This depends on the currently active Chinese adaptive search mode. + * This should be used only when current input language is Chinese. + */ + TInt ChineseScriptToUseL() const; + +private: // data + + /** Control environment to use for resource management */ + CCoeEnv& iCoeEnv; + + /** Observer is notified when keypad labels are changed */ + MDialerKeyPadLabelManagerCallback& iObserver; + + /** PtiEngine instance is needed to find out available input languages */ + CPtiEngine* iPtiEngine; + + /** AknFep repository stores the current input language */ + CDialerCenRepWrapper* iAknFepRepository; + + /** Avkon repository stores the current Chinese matching mode */ + CDialerCenRepWrapper* iAvkonRepository; + + /** Helper to observe locale changes. Locale data contains digit type used for number labels. */ + CEnvironmentChangeNotifier* iEnvChangeNotifier; + + /** + * Array of number labels. Indexing matches that of the + * CDialerKeypadContainer::iButtons array. Owned. + */ + CDesCArray* iKeypadNumLabelArray; + + /** + * Array of first row alphabet labels. Indexing matches that of the + * CDialerKeypadContainer::iButtons array. Owned. + */ + CDesCArray* iKeypadFirstLabelArray; + + /** + * Array of second row alphabet labels. Indexing matches that of the + * CDialerKeypadContainer::iButtons array. Owned. + */ + CDesCArray* iKeypadSecondLabelArray; + + /** + * Offset value of currently loaded keypad resource. + * 0 if there's no loaded resource. + */ + TInt iResourceOffset; + + /** Script ID of the current keypad labels */ + TInt iLabelScriptInUse; + + /** Digit type currently used for keypad number labels */ + TDigitType iDigitTypeInUse; + }; + +#endif // CDIALERKEYPADLABELMANAGER_H + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/inc/cdialernumberentry.h --- a/phoneuis/dialer/inc/cdialernumberentry.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/inc/cdialernumberentry.h Sun Mar 14 13:09:36 2010 +0000 @@ -28,6 +28,7 @@ #include #include "cdialercontainerbase.h" +#include "dialer.hrh" // CONSTANTS @@ -37,7 +38,7 @@ class CAknsFrameBackgroundControlContext; class MNumberEntryObserver; class CEikLabel; - +class CDialingExtensionInterface; // Number entry varietys enum TDialerNEVariety @@ -111,10 +112,16 @@ void SetTextToNumberEntry( const TDesC& aDesC ); /** + * Returns TPtrC pointed to editor text. + * @return Pointer to editor text. + */ + TPtrC Text() const; + + /** * Get tect from number entry. - * @param aDesc Text is returned here. + * @param aDes Text is returned here. */ - void GetTextFromNumberEntry( TDes& aDesC ); + void GetTextFromNumberEntry( TDes& aDes ); /** * Reset editor to default values. @@ -143,7 +150,13 @@ * Clear editor flags to default values. */ void ClearEditorFlags(); + + void SetEasyDialingPlugin( CDialingExtensionInterface* iEasyDialer ); + void SetOperationMode( TDialerOperationMode aMode ); + + TBool Validate( const TDesC& aString ); + private: // Functions from MCoeControlObserver /** * @see MCoeControlObserver @@ -178,12 +191,22 @@ */ void HandleResourceChange( TInt aType ); + /** + * @see CCoeControl + */ + void HandlePointerEventL( const TPointerEvent& aPointerEvent ); + public: /** * @see CCoeControl */ void SetFocus( TBool aFocus, TDrawNow aDrawNow=ENoDrawNow ); + + /** + * @see CCoeControl + */ + void MakeVisible( TBool aVisible ); private: // From CDialerContainerBase @@ -289,6 +312,16 @@ MNumberEntryObserver* iObserver; TBool iNumberContents; + + TBuf iPreviousNumberEntryContent; + + // NOT OWN + CDialingExtensionInterface* iEasyDialer; + + TDialerOperationMode iOperationMode; + + // NOT OWNED. + CEikAppUi* iAppUi; }; #endif // CDIALERNUMBERENTRY_H diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/inc/cdialertoolbarcontainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/inc/cdialertoolbarcontainer.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,129 @@ +/* +* Copyright (c) 2009, 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: CDialerToolbarContainer replaces the standard S60 toolbar +* in the Dialer layout in the Easy dialing mode. It's +* responsible of the toolbar layout and logic, but not of the +* contents which are provided by an instance of +* MPhoneDialerController. +* +*/ + +#ifndef CDIALERTOOLBAR_H_ +#define CDIALERTOOLBAR_H_ + +// INCLUDES +#include +#include "cdialercontainerbase.h" + +// FORWARD DECLARATIONS +class CAknButton; + + +// CLASS DECLARATION +NONSHARABLE_CLASS(CDialerToolbarContainer) : + public CDialerContainerBase, + private MCoeForegroundObserver + { +public: // constructor and destructor + static CDialerToolbarContainer* NewL( + CCoeControl& aParent, + MPhoneDialerController* aContentProvider ); + virtual ~CDialerToolbarContainer(); + +private: // constructors + CDialerToolbarContainer( + CCoeControl& aParent, + MPhoneDialerController* aContentProvider ); + void ConstructL(); + +public: // new methods + /** + * Set provider of toolbar button functions + */ + void SetContentProviderL( MPhoneDialerController* aProvider ); + + /** + * Update states of all toolbar buttons. + */ + void UpdateButtonStates(); + +protected: // from CDialerContainerBase + virtual void SetVariety(); + virtual void SetLayout(); + +protected: // from CCoeControl + TInt CountComponentControls() const; + CCoeControl* ComponentControl( TInt aIndex ) const; + void HandlePointerEventL( const TPointerEvent& aPointerEvent ); + +private: // from MCoeControlObserver + /** + * Callback for handling button presses. + */ + void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ); + +private: // from MCoeForegroundObserver + void HandleGainingForeground(); + void HandleLosingForeground(); + +private: // new methods + + /** + * Create toolbar button instances and fill them with states + * according the data given by the content provider. + */ + void CreateButtonsL(); + + /** + * Delete all buttons and free the memory reserved for button data. + */ + void DeleteButtons(); + + /** + * Create and add new button state. + */ + void AddButtonStateL( TInt aButtonIndex, MPhoneDialerController::CButtonData& aButtonData ); + + /** + * Get command ID for the given button in it's current state. + */ + TInt ButtonCommand( const CAknButton& aButton ) const; + + /** + * Set layout for one button. + * @param aButtonIdx Index of the button to be laid out. + * @param aPos Position (top-left corned) where button is to be placed. + * @return Position of the next button. + */ + TPoint LayoutButton( TInt aButtonIdx, TPoint aPos ); + +private: // data + + /** Provides toolbar button data. Not owned. */ + MPhoneDialerController* iContentProvider; + + /** Button objects. Owned. */ + RPointerArray< CAknButton > iButtons; + + /** + * Maps buttons states to command IDs. + * First index is the button index, second index is the state index. + */ + RArray< RArray > iButtonCommands; + + /** The last received pointer event. */ + TPointerEvent iLatestPointerEvent; + }; + +#endif /* CDIALERTOOLBAR_H_ */ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/inc/cdialingextensionobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/inc/cdialingextensionobserver.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,89 @@ +/* +* Copyright (c) 2007 - 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: CDialingExtensionObserver provides an observer class for +* dialingextension plug-in. +* +*/ + +#ifndef CDIALINGEXTENSIONOBSERVER_H +#define CDIALINGEXTENSIONOBSERVER_H + +#include + +class CDialingExtensionInterface; +class CDialerNumberEntry; +class CDialer; + + +NONSHARABLE_CLASS( CDialingExtensionObserver ) : public CBase, public MDialingExtensionObserver + { +public: + + /** + * Two phase constructor + * @param aDialingExtension Dialer extension. Does not take ownership. + * @param aNumberEditor Number editor. Does not take ownership. + * @param aDialer Dialer. Does not take ownership. + * @return New instance + */ + static CDialingExtensionObserver* NewL( + CDialingExtensionInterface* aDialingExtension, + CDialerNumberEntry* aNumberEntry, + CDialer* aDialer ); + + /** + * Destructor + */ + ~CDialingExtensionObserver(); + + /** + * MDialingExtensionObserver function. + */ + void HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent ); + +private: + + + /** + * Cconstructor + * @param aDialingExtension Dialer extension. Does not take ownership. + * @param aNumberEditor Number editor. Does not take ownership. + * @param aDialer Dialer. Does not take ownership. + */ + CDialingExtensionObserver( + CDialingExtensionInterface* aDialingExtension, + CDialerNumberEntry* aNumberEntry, + CDialer* aDialer ); + + void UpdateCba(); + + void SearchL(); + +private: + + // Not owned. + CDialingExtensionInterface* iDialingExtension; + + // Not owned. + CDialerNumberEntry* iNumberEntry; + + // Not owned. + CDialer* iDialer; + + // Not owned. + CEikonEnv* iEikonEnvironment; + }; + +#endif // CDIALINGEXTENSIONOBSERVER_H + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/inc/dialer.hrh --- a/phoneuis/dialer/inc/dialer.hrh Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/inc/dialer.hrh Sun Mar 14 13:09:36 2010 +0000 @@ -101,7 +101,8 @@ { EModeDialer, // Phone Dialer EModeVoiceDTMF, // Phone DTMF string query - EModeVideoDTMF // Video telephony DTMF send + EModeVideoDTMF, // Video telephony DTMF send + EModeEasyDialing // Easy dialing mode }; enum TVideoVariety diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/inc/dialercommon.h --- a/phoneuis/dialer/inc/dialercommon.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/inc/dialercommon.h Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007 - 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" @@ -35,6 +35,27 @@ // ROM drive. _LIT( KDriveZ, "z:" ); +// Application name literal for panic macro +_LIT( KModuleName, "Dialer" ); + +// Panic macro +inline void DialerPanic( TInt aReason ) + { + User::Panic( KModuleName, aReason ); + } + +// Panic codes +enum TDialerPanicCode + { + EDialerPanicDrawingError = 100, + EDialerPanicNoApplicationInstance, + EDialerPanicUnknownScript, + EDialerPanicChineseScriptError, + EDialerPanicLabelNotFound, + EDialerPanicToolbarButtonNotFound, + EDialerPanicNullController + }; + #endif // DIALERCOMMON_H // End of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/inc/mnumberentry.h --- a/phoneuis/dialer/inc/mnumberentry.h Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/inc/mnumberentry.h Sun Mar 14 13:09:36 2010 +0000 @@ -29,6 +29,7 @@ // FORWARD DECLARATIONS class CCoeControl; +class CEikMenuPane; // easydialing // CLASS DECLARATION diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/rom/dialer_variant.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/rom/dialer_variant.iby Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2009, 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: Image description file for variable resouces of Dialer +* +*/ + + +#ifndef DIALER_VARIANT_IBY +#define DIALER_VARIANT_IBY + +#include + +// NOTE: It's necessary to include keypad resources only to those scripts +// which are present in the device. However, including them all doens't hurt +// either and each resource file is quite small. +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad.rsc RESOURCE_FILES_DIR\dialerkeypad.rsc +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_cyrillic.rsc RESOURCE_FILES_DIR\dialerkeypad_cyrillic.rsc +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_greek.rsc RESOURCE_FILES_DIR\dialerkeypad_greek.rsc +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_hebrew.rsc RESOURCE_FILES_DIR\dialerkeypad_hebrew.rsc +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_arabic.rsc RESOURCE_FILES_DIR\dialerkeypad_arabic.rsc +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_farsi.rsc RESOURCE_FILES_DIR\dialerkeypad_farsi.rsc +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_urdu.rsc RESOURCE_FILES_DIR\dialerkeypad_urdu.rsc +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_thai.rsc RESOURCE_FILES_DIR\dialerkeypad_thai.rsc +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_devanagari.rsc RESOURCE_FILES_DIR\dialerkeypad_devanagari.rsc +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_chn_pinyin.rsc RESOURCE_FILES_DIR\dialerkeypad_chn_pinyin.rsc +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_chn_stroke.rsc RESOURCE_FILES_DIR\dialerkeypad_chn_stroke.rsc +data = DATAZ_\RESOURCE_FILES_DIR\dialerkeypad_chn_zhuyin.rsc RESOURCE_FILES_DIR\dialerkeypad_chn_zhuyin.rsc + +#endif // DIALER_VARIANT_IBY diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/src/cdialer.cpp --- a/phoneuis/dialer/src/cdialer.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/src/cdialer.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007 - 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" @@ -31,20 +31,24 @@ #include // for KDC_APP_RESOURCE_DIR #include // for BaflUtils #include +#include +#include #include "cdialer.h" #include "dialercommon.h" -#include #include "dialer.hrh" #include "cdialerkeypadcontainer.h" #include "cdialernumberentry.h" #include "dialertrace.h" #include "mnumberentry.h" +#include "cdialingextensionobserver.h" +#include "cdialertoolbarcontainer.h" /// ROM drive. _LIT( KDialerResourceFile, "dialer.rsc" ); -// number entry, keypad area -const TInt KContainedControlsInTelephonyMode = 2; + +// number entry, keypad area, easydialing, toolbar +const TInt KContainedControlsInTelephonyMode = 4; // ========================= MEMBER FUNCTIONS ================================ @@ -55,12 +59,13 @@ // --------------------------------------------------------------------------- // EXPORT_C CDialer* CDialer::NewL( const CCoeControl& aContainer, - const TRect& aRect ) + const TRect& aRect, + MPhoneDialerController* aController ) { - CDialer* self = new( ELeave )CDialer ( ); + CDialer* self = new( ELeave )CDialer(); CleanupStack::PushL( self ); - self->ConstructL( aContainer , aRect ); - CleanupStack::Pop(); // self + self->ConstructL( aContainer, aRect, aController ); + CleanupStack::Pop( self ); return self; } @@ -73,6 +78,10 @@ delete iKeypadArea; delete iNumberEntry; + delete iEasyDialer; + delete iDialingExtensionObserver; + delete iToolbar; + UnLoadResources(); DIALER_PRINT("CDialer::~CDialer>"); } @@ -85,7 +94,8 @@ // void CDialer::ConstructL( const CCoeControl& aContainer, - const TRect& aRect ) + const TRect& aRect, + MPhoneDialerController* aController ) { DIALER_PRINT("CDialer::ConstructL<"); LoadResourceL(); @@ -93,16 +103,28 @@ // set window SetContainerWindowL( aContainer ); SetParent( const_cast(&aContainer) ); - iParentControl = &aContainer; iNumberEntry = CDialerNumberEntry::NewL( *this ); - iKeypadArea = CDialerKeyPadContainer::NewL( *this, EModeDialer ); + iController = aController; + + iKeypadArea = CDialerKeyPadContainer::NewL( *this, EModeEasyDialing ); + iToolbar = CDialerToolbarContainer::NewL( *this, iController ); + + // try to create easydialing plugin. If plugin is not present, iEasydialer gets value NULL. + LoadEasyDialingPlugin(); + + iNumberEntry->SetEasyDialingPlugin( iEasyDialer ); + iNumberEntry->SetObserver( this ); + iNumberEntry->SetNumberEntryPromptTextL( iController->NumberEntryPromptTextL() ); + + UpdateToolbar(); + SetRect( aRect ); - SetComponentsToInheritVisibility( ETrue ); - + SetComponentsToInheritVisibility( EFalse ); + ActivateL(); DIALER_PRINT("CDialer::ConstructL>"); } @@ -136,6 +158,59 @@ iNumberEntry->SetNumberEntryObserver( aObserver ); } +// ----------------------------------------------------------------------------- +// CDialer::SetControllerL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CDialer::SetControllerL( MPhoneDialerController* aController ) + { + DIALER_PRINTF( "CDialer::SetControllerL, aController = %x", aController ); + __ASSERT_DEBUG( aController, DialerPanic(EDialerPanicNullController) ); + if ( aController && iController != aController ) + { + iController = aController; + iToolbar->SetContentProviderL( iController ); + iNumberEntry->SetNumberEntryPromptTextL( iController->NumberEntryPromptTextL() ); + SizeChanged(); + UpdateToolbar(); + } + } + +// --------------------------------------------------------------------------- +// CDialer::Controller +// --------------------------------------------------------------------------- +// +EXPORT_C MPhoneDialerController* CDialer::Controller() + { + return iController; + } + +// --------------------------------------------------------------------------- +// CDialer::GetEasyDialingInterface +// --------------------------------------------------------------------------- +// +EXPORT_C CDialingExtensionInterface* CDialer::GetEasyDialingInterface() const + { + DIALER_PRINT("CDialer::GetEasyDialingInterface"); + return iEasyDialer; + } + +// --------------------------------------------------------------------------- +// CDialer::UpdateToolbar +// --------------------------------------------------------------------------- +// +EXPORT_C void CDialer::UpdateToolbar() + { + if ( iToolbar && iNumberEntry && iController ) + { + TBool numAvailable = ( iNumberEntry->TextLength() > 0 ); + iController->SetNumberEntryIsEmpty( !numAvailable ); + iToolbar->UpdateButtonStates(); + iToolbar->DrawDeferred(); + iKeypadArea->DrawDeferred(); // needed to remove drawing problem from leftmost button column + } + } + // Methods from MNumberEntry // --------------------------------------------------------------------------- @@ -149,7 +224,7 @@ DIALER_PRINT("CDialer::CreateNumberEntry<"); iIsUsed = ETrue; - + DIALER_PRINT("CDialer::CreateNumberEntry>"); } @@ -158,7 +233,7 @@ // // --------------------------------------------------------------------------- // -CCoeControl* CDialer::GetNumberEntry( ) const +CCoeControl* CDialer::GetNumberEntry() const { CCoeControl* control( NULL ); control = iNumberEntry->GetNumberEntry(); @@ -170,7 +245,7 @@ // // --------------------------------------------------------------------------- // -TBool CDialer::IsNumberEntryUsed( ) const +TBool CDialer::IsNumberEntryUsed() const { return iIsUsed; } @@ -199,9 +274,9 @@ // // --------------------------------------------------------------------------- // -void CDialer::GetTextFromNumberEntry( TDes& aDesC ) +void CDialer::GetTextFromNumberEntry( TDes& aDes ) { - iNumberEntry->GetTextFromNumberEntry( aDesC ); + iNumberEntry->GetTextFromNumberEntry( aDes ); } // --------------------------------------------------------------------------- @@ -209,10 +284,18 @@ // // --------------------------------------------------------------------------- // -void CDialer::RemoveNumberEntry( ) +void CDialer::RemoveNumberEntry() { ResetEditorToDefaultValues(); iIsUsed = EFalse; + + // easydialer change begins + if (iEasyDialer) + { + TRAP_IGNORE( iEasyDialer->HandleCommandL( EEasyDialingClosePopup ) ); + iEasyDialer->Reset(); + } + // easydialer change ends } // --------------------------------------------------------------------------- @@ -281,6 +364,30 @@ iKeypadArea->EnableTactileFeedback( aEnable ); } +// --------------------------------------------------------------------------- +// CDialer::HandleControlEventL +// --------------------------------------------------------------------------- +// +void CDialer::HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ) + { + switch ( aEventType ) + { + case MCoeControlObserver::EEventRequestFocus: + if ( aControl == iNumberEntry ) + { + if ( iEasyDialer ) + { + iEasyDialer->SetFocus( EFalse ); + } + iNumberEntry->SetFocus( ETrue ); + } + break; + + default: + break; + } + } + // Functions from CCoeControl // --------------------------------------------------------------------------- @@ -293,7 +400,7 @@ void CDialer::SizeChanged() { AknsUtils::RegisterControlPosition( this ); - TRect parentRect(Rect()); + TRect parentRect( Rect() ); // Method is called before containers are created. if ( !iKeypadArea ) @@ -301,19 +408,32 @@ return; } - TDialerVariety variety( EDialerVarietyLandscape ); - if ( !Layout_Meta_Data::IsLandscapeOrientation() ) - { - variety = EDialerVarietyPortrait; - } - // number entry - AknLayoutUtils::LayoutControl( - iNumberEntry, parentRect, - AknLayoutScalable_Apps::dialer2_ne_pane( variety ).LayoutLine() ); - // keypad area. + TDialerVariety variety = ( Layout_Meta_Data::IsLandscapeOrientation() ? + EDialerVarietyLandscape : EDialerVarietyPortrait ); + + // keypad area + TDialerOperationMode keypadOpMode = + ( EasyDialingEnabled() ? EModeEasyDialing : EModeDialer ); + iKeypadArea->SetOperationMode( keypadOpMode ); AknLayoutUtils::LayoutControl( iKeypadArea, parentRect, - AknLayoutScalable_Apps::grid_dialer2_keypad_pane( variety ).LayoutLine() ); + AknLayoutScalable_Apps::dia3_keypad_num_pane( variety ).LayoutLine() ); + + // toolbar + AknLayoutUtils::LayoutControl( + iToolbar, parentRect, + AknLayoutScalable_Apps::dia3_keypad_fun_pane( variety ).LayoutLine() ); + + // easy dial contacts list + if ( iEasyDialer ) + { + AknLayoutUtils::LayoutControl( + iEasyDialer, parentRect, + AknLayoutScalable_Apps::dia3_listscroll_pane( variety ).LayoutLine() ); + } + + // number entry + LayoutNumberEntry( parentRect, variety ); } // --------------------------------------------------------------------------- @@ -333,8 +453,12 @@ // TInt CDialer::CountComponentControls() const { - TInt count(0); - count = KContainedControlsInTelephonyMode; + TInt count( KContainedControlsInTelephonyMode ); + + if ( !iEasyDialer ) + { + count--; + } return count; } @@ -347,7 +471,7 @@ CCoeControl* CDialer::ComponentControl( TInt aIndex ) const { CCoeControl* currentControl(NULL); - currentControl = ComponentControlForDialerMode( aIndex); + currentControl = ComponentControlForDialerMode( aIndex ); return currentControl; } @@ -365,7 +489,17 @@ // void CDialer::FocusChanged(TDrawNow aDrawNow) { - iNumberEntry->SetFocus( IsFocused(), aDrawNow ); + if ( iEasyDialer ) + { + // Number entry is set to focus if dialer is in focus and easydialing plugin + // is not in focus. + TBool numberEntryFocus = IsFocused() && !iEasyDialer->IsFocused(); + iNumberEntry->SetFocus( numberEntryFocus, aDrawNow ); + } + else + { + iNumberEntry->SetFocus( IsFocused(), aDrawNow ); + } } // --------------------------------------------------------------------------- @@ -373,9 +507,32 @@ // --------------------------------------------------------------------------- // void CDialer::MakeVisible( TBool aVisible ) - { - CCoeControl::MakeVisible( aVisible ); - } + { + CCoeControl::MakeVisible( aVisible ); + + // Component control do not inherit visibility automatically as we + // want to control their visibility separately. + if ( iNumberEntry ) + { + iNumberEntry->MakeVisible( aVisible ); + } + + if ( iKeypadArea ) + { + iKeypadArea->MakeVisible( aVisible ); + } + + if ( iEasyDialer ) + { + TBool edVisible = + ( aVisible && EasyDialingEnabled() ); + iEasyDialer->MakeVisible( edVisible ); + } + if ( iToolbar ) + { + iToolbar->MakeVisible( aVisible ); + } + } // --------------------------------------------------------------------------- // CDialer::PrepareForFocusGainL @@ -471,6 +628,14 @@ case 1: currentControl = iKeypadArea; break; + + case 2: + currentControl = iToolbar; + break; + case 3: + currentControl = iEasyDialer; + break; + default: { __ASSERT_DEBUG( EFalse, _L("CDialer::ComponentControl no such component defined")); @@ -524,4 +689,74 @@ MAknEdStateObserver::EAknEdwinStateEventStateUpdate ); } +// --------------------------------------------------------------------------- +// CDialer::LoadEasyDialingPlugin +// --------------------------------------------------------------------------- +// +void CDialer::LoadEasyDialingPlugin() + { + DIALER_PRINT( "CDialer::LoadEasyDialingPlugin" ) + TRAPD( error, + { + iEasyDialer = CDialingExtensionInterface::NewL(); + iEasyDialer->InitializeL( *this ); + + iDialingExtensionObserver = CDialingExtensionObserver::NewL( iEasyDialer, iNumberEntry, this ); + iEasyDialer->AddObserverL( iDialingExtensionObserver ); + } ); + + if ( error ) + { + DIALER_PRINT( "CDialer::LoadEasyDialingPlugin, load failed" ) + + delete iEasyDialer; + iEasyDialer = NULL; + + delete iDialingExtensionObserver; + iDialingExtensionObserver = NULL; + } + } + +// --------------------------------------------------------------------------- +// CDialer::EasyDialingEnabled +// --------------------------------------------------------------------------- +// +TBool CDialer::EasyDialingEnabled() const + { + TBool easyDialEnabled = ( iEasyDialer && + iEasyDialer->IsEnabled() && + iController && + iController->EasyDialingAllowed() ); + return easyDialEnabled; + } + +// --------------------------------------------------------------------------- +// CDialer::LayoutNumberEntry +// --------------------------------------------------------------------------- +// +void CDialer::LayoutNumberEntry( const TRect& aParent, TInt aVariety ) + { + // Use larger number entry if Easy dialing is not currently enabled. + if ( EasyDialingEnabled() ) + { + iNumberEntry->SetOperationMode( EModeEasyDialing ); + AknLayoutUtils::LayoutControl( + iNumberEntry, aParent, + AknLayoutScalable_Apps::dia3_numentry_pane( aVariety ).LayoutLine() ); + } + else + { + iNumberEntry->SetOperationMode( EModeDialer ); + TAknLayoutRect neLayoutRect; + neLayoutRect.LayoutRect( aParent, AknLayoutScalable_Apps::dia3_numentry_pane( aVariety ) ); + TAknLayoutRect edLayoutRect; + edLayoutRect.LayoutRect( aParent, AknLayoutScalable_Apps::dia3_listscroll_pane( aVariety ) ); + + // create rect which is union of layout rects for ED and NE + TRect neRect( edLayoutRect.Rect().iTl, neLayoutRect.Rect().iBr ); + + iNumberEntry->SetRect( neRect ); + } + } + // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/src/cdialercenrepwrapper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/src/cdialercenrepwrapper.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,111 @@ +/* +* 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: Wrapper class for Central Repository handling. +* Using this helper class is most helpful when one class needs +* to observe state changes in several repositories. +*/ + +#include +#include "cdialercenrepwrapper.h" + +// --------------------------------------------------------------------------- +// CDialerCenRepWrapper::CDialerCenRepWrapper +// +// --------------------------------------------------------------------------- +// +CDialerCenRepWrapper::CDialerCenRepWrapper( + MDialerCenRepObserver& aObserver, TUid aRepository ) : + iObserver( aObserver ), iRepositoryId( aRepository ) + { + // No implementation required + } + +// --------------------------------------------------------------------------- +// CDialerCenRepWrapper::~CDialerCenRepWrapper +// +// --------------------------------------------------------------------------- +// +CDialerCenRepWrapper::~CDialerCenRepWrapper() + { + if ( iCenRepNotifyHandler ) + { + iCenRepNotifyHandler->StopListening(); + delete iCenRepNotifyHandler; + } + delete iRepository; + } + +// --------------------------------------------------------------------------- +// CDialerCenRepWrapper::NewLC +// +// --------------------------------------------------------------------------- +// +CDialerCenRepWrapper* CDialerCenRepWrapper::NewLC( + MDialerCenRepObserver& aObserver, TUid aRepository ) + { + CDialerCenRepWrapper* self = + new (ELeave) CDialerCenRepWrapper( aObserver, aRepository ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CDialerCenRepWrapper::NewL +// +// --------------------------------------------------------------------------- +// +CDialerCenRepWrapper* CDialerCenRepWrapper::NewL( + MDialerCenRepObserver& aObserver, TUid aRepository ) + { + CDialerCenRepWrapper* self = + CDialerCenRepWrapper::NewLC( aObserver, aRepository ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CDialerCenRepWrapper::ConstructL +// +// --------------------------------------------------------------------------- +// +void CDialerCenRepWrapper::ConstructL() + { + iRepository = CRepository::NewL( iRepositoryId ); + iCenRepNotifyHandler = CCenRepNotifyHandler::NewL( *this, *iRepository ); + iCenRepNotifyHandler->StartListeningL(); + } + +// --------------------------------------------------------------------------- +// CDialerCenRepWrapper::HandleNotifyGeneric +// +// --------------------------------------------------------------------------- +// +void CDialerCenRepWrapper::HandleNotifyGeneric( TUint32 aId ) + { + iObserver.HandleRepositoryChange( iRepositoryId, aId ); + } + +// --------------------------------------------------------------------------- +// CDialerCenRepWrapper::Get +// +// --------------------------------------------------------------------------- +// +TInt CDialerCenRepWrapper::Get( TUint32 aKey, TInt& aValue ) + { + return iRepository->Get( aKey, aValue ); + } + +// end of file + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/src/cdialerkeypadbutton.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/src/cdialerkeypadbutton.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,460 @@ +/* +* Copyright (c) 2009, 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: Shows number keypad and generates keypress event when +* buttons are pressed. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include // for KDC_APP_RESOURCE_DIR +#include +#include +#include +#include + +#include "dialercommon.h" +#include "dialertrace.h" +#include "cdialerkeypadbutton.h" + +_LIT( KDialerMifFileName, "dialer.mif" ); +static const TInt KIconMarginPercent = 5; +static const TInt KCent = 100; + +// --------------------------------------------------------------------------- +// C++ default constructor +// --------------------------------------------------------------------------- +// +CDialerKeyPadButton::CDialerKeyPadButton( const TDesC& aNumberLabel, + const TDesC& aPrimaryAlphaLabel, + const TDesC& aSecondaryAlphaLabel, + TInt aScanCode, + TInt aKeyCode, + TMifDialer aButtonIconId, + TMifDialer aButtonIconMaskId, + TInt aFlags ): + CAknButton( aFlags ), + iScanCode( aScanCode ), + iKeyCode( aKeyCode ), + iButtonIconId( aButtonIconId ), + iButtonIconMaskId( aButtonIconMaskId ), + iNumberLabel( aNumberLabel ), + iPrimaryAlphaLabel( aPrimaryAlphaLabel ), + iSecondaryAlphaLabel( aSecondaryAlphaLabel ) + { + } + +// ----------------------------------------------------------------------------- +// CDialerKeyPadButton::NewLC +// Two-phased constructor. +// Constructs dialer button. +// ----------------------------------------------------------------------------- +// + +CDialerKeyPadButton* CDialerKeyPadButton::NewLC( const TDesC& aNumberLabel, + const TDesC& aPrimaryAlphaLabel, + const TDesC& aSecondaryAlphaLabel, + TInt aScanCode, + TInt aKeyCode, + TMifDialer aButtonIconId, + TMifDialer aButtonIconMaskId, + TInt aFlags ) + { + CDialerKeyPadButton* self = new (ELeave) CDialerKeyPadButton( aNumberLabel, + aPrimaryAlphaLabel, + aSecondaryAlphaLabel, + aScanCode, + aKeyCode, + aButtonIconId, + aButtonIconMaskId, + aFlags ); + CleanupStack::PushL( self ); + self->ConstructL( aFlags ); + return self; + } + +// ----------------------------------------------------------------------------- +// CDialerKeyPadButton::ConstructL +// Symbian 2nd phase constructor for dialer button. +// ----------------------------------------------------------------------------- +// +void CDialerKeyPadButton::ConstructL( TInt aFlags ) + { + CAknButton::ConstructL( NULL, NULL, NULL, NULL, KNullDesC, KNullDesC, aFlags ); + UpdateIconL(); + + // button text color + SetTextColorIds( KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG65 ); + SetIconScaleMode( EAspectRatioPreserved ); + SetMargins( TMargins8(0,0,0,0) ); + AknsUtils::RegisterControlPosition( this ); + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CDialerKeyPadButton::~CDialerKeyPadButton() + { + AknsUtils::DeregisterControlPosition( this ); + + MTouchFeedback* feedback = MTouchFeedback::Instance(); + if ( feedback ) + { + feedback->RemoveFeedbackForControl( this ); + } + } + +// --------------------------------------------------------------------------- +// Draw dialer button, text and icon. +// --------------------------------------------------------------------------- +// +void CDialerKeyPadButton::Draw( const TRect& aRect ) const + { + TAknLayoutRect centerLayout; + centerLayout.LayoutRect( aRect, + AknLayoutScalable_Avkon::toolbar_button_pane_g1().LayoutLine() ); + TRect innerRect = centerLayout.Rect(); + + CWindowGc& gc = SystemGc(); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + TAknsItemID frameId = KAknsIIDQsnFrButtonNormal; + + if ( iButtonPressed ) + { + frameId = KAknsIIDQsnFrButtonPressed; + } + else if ( IsDimmed() ) + { + frameId = KAknsIIDQsnFrButtonInactive; + } + + iBgContext->SetFrame( frameId ); + iBgContext->SetCenter( KAknsIIDQsnFrButtonCenterNormal ); + iBgContext->SetFrameRects( aRect, innerRect ); + + TBool bgDrawn = AknsDrawUtils::Background( skin, + iBgContext, + NULL, + gc, + aRect, + KAknsDrawParamNoClearUnderImage ); + + __ASSERT_DEBUG( bgDrawn, DialerPanic( EDialerPanicDrawingError ) ); + + DrawIconAndText( gc ); + } + +// ----------------------------------------------------------------------------- +// Respond to changes in the button size +// ----------------------------------------------------------------------------- +// +void CDialerKeyPadButton::SizeChanged() + { + CAknButton::SizeChanged(); + AknsUtils::RegisterControlPosition( this ); + + TRect buttonRect = Rect(); + TAknLayoutRect iconLayout; + const CGulIcon* icon = GetCurrentIcon(); + + if ( iOperationMode == EModeEasyDialing ) + { + // Number layout. + iNumberLayout.LayoutText( buttonRect, + AknLayoutScalable_Apps::cell_dia3_key_num_pane_t1( iVariety ) ); + // Use different number layout if key doens't contain any alphabets or icon. + if ( !icon && !iPrimaryAlphaLabel.Length() && !iSecondaryAlphaLabel.Length() ) + { + iNumberLayout.LayoutText( buttonRect, + AknLayoutScalable_Apps::cell_dialer2_keypad_pane_t1(), + iNumberLayout.Font() ); + } + + // Alphabet layout is different if two rows of alphabets are given + if ( iSecondaryAlphaLabel.Length() ) + { + iPrimaryAlphaLayout.LayoutText( buttonRect, + AknLayoutScalable_Apps::cell_dia3_key_num_pane_t3( iVariety ) ); + iSecondaryAlphaLayout.LayoutText( buttonRect, + AknLayoutScalable_Apps::cell_dia3_key_num_pane_t4( iVariety ) ); + } + else + { + iPrimaryAlphaLayout.LayoutText( buttonRect, + AknLayoutScalable_Apps::cell_dia3_key_num_pane_t2( iVariety ) ); + } + + // Icon layout + iconLayout.LayoutRect( buttonRect, + AknLayoutScalable_Apps::cell_dialer2_keypad_pane_g2( 1 ) ); + iIconRect = iconLayout.Rect(); + + // Icon doesn't fit to location set in the layout if key has any alpha label. + // In that case, move the icon to upper-right corner. + if ( iPrimaryAlphaLabel.Length() || iSecondaryAlphaLabel.Length() ) + { + TSize iconSize = iIconRect.Size(); + TInt xMargin = buttonRect.Width() * KIconMarginPercent / KCent; + TInt yMargin = buttonRect.Height() * KIconMarginPercent / KCent; + TPoint iconPos( buttonRect.iBr.iX - iconSize.iWidth - xMargin, + buttonRect.iTl.iY + yMargin ); + iIconRect.SetRect( iconPos, iconSize ); + } + } + else if ( iOperationMode == EModeDialer ) + { + // Number layout + iNumberLayout.LayoutText( buttonRect, + AknLayoutScalable_Apps::cell_dialer2_keypad_pane_t1() ); + + // Icon layout + iconLayout.LayoutRect( buttonRect, + AknLayoutScalable_Apps::cell_dialer2_keypad_pane_g2( 1 ) ); + iIconRect = iconLayout.Rect(); + } + else // video mode layout + { + // Number layout + iNumberLayout.LayoutText( buttonRect, + AknLayoutScalable_Apps::cell_video_dialer_keypad_pane_t1() ); + + // Icon layout + iconLayout.LayoutRect( buttonRect, + AknLayoutScalable_Apps::cell_video_dialer_keypad_pane_g2( 2 ) ); + iIconRect = iconLayout.Rect(); + } + + SetIconSize( iIconRect.Size() ); + } + +// ----------------------------------------------------------------------------- +// Gets the correct text color. +// ----------------------------------------------------------------------------- +// +void CDialerKeyPadButton::GetTextColors( TRgb& aPenColor, TRgb& aBrushColor ) const + { + aBrushColor = iEikonEnv->ControlColor( EColorControlBackground, *this ); + + if ( iButtonPressed ) + { + aPenColor = iEikonEnv->ControlColor( EColorButtonTextPressed, *this ); + } + else + { + aPenColor = iEikonEnv->ControlColor( EColorButtonText, *this ); + } + } + +// -------------------------------------------------------------------------- +// Draw text and icon according to the layout. +// -------------------------------------------------------------------------- +// +void CDialerKeyPadButton::DrawIconAndText( CWindowGc& aGc ) const + { + TRect parentRect( Rect() ); + TAknLayoutText buttonText; + TAknLayoutRect layoutRect; + + TRgb penColor; + TRgb brushColor; + GetTextColors( penColor, brushColor ); + + // Don't ues logical-to-visual conversion, strings in our keypad resources are already + // in visual order. + TBool logToVisConv = EFalse; + + iNumberLayout.DrawText( aGc, iNumberLabel, logToVisConv, penColor ); + + // Draw also alphabet label(s) in Easy Dialing mode + if ( iOperationMode == EModeEasyDialing ) + { + if ( iPrimaryAlphaLabel.Length() ) + { + iPrimaryAlphaLayout.DrawText( aGc, iPrimaryAlphaLabel, logToVisConv, penColor ); + } + if ( iSecondaryAlphaLabel.Length() ) + { + iSecondaryAlphaLayout.DrawText( aGc, iSecondaryAlphaLabel, logToVisConv, penColor ); + } + } + + const CGulIcon* icon = GetCurrentIcon(); + if ( icon ) + { + CFbsBitmap* buttonBmp = icon->Bitmap(); + CFbsBitmap* buttonMask = icon->Mask(); + + if ( buttonBmp && buttonMask ) + { + aGc.BitBltMasked( iIconRect.iTl, buttonBmp, + iIconRect.Size(), buttonMask, ETrue ); + } + } + } + +// -------------------------------------------------------------------------- +// Set layout data for text. +// -------------------------------------------------------------------------- +void CDialerKeyPadButton::SetVariety( TInt aVariety ) + { + iVariety = aVariety; + } + +// -------------------------------------------------------------------------- +// Set layout data for text. +// -------------------------------------------------------------------------- +void CDialerKeyPadButton::SetOperationMode( TDialerOperationMode aMode ) + { + iOperationMode = aMode; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadButton::SetNumLabel( const TDesC& aLabel ) + { + iNumberLabel.Set( aLabel ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadButton::SetPrimaryAlphaLabel( const TDesC& aLabel ) + { + iPrimaryAlphaLabel.Set( aLabel ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadButton::SetSecondaryAlphaLabel( const TDesC& aLabel ) + { + iSecondaryAlphaLabel.Set( aLabel ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CDialerKeyPadButton::ScanCode() const + { + return iScanCode; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CDialerKeyPadButton::KeyCode() const + { + return iKeyCode; + } +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadButton::MapDialerIconToSkinIcon( + TInt aDialerIcon, TAknsItemID& aItemId ) const + { + switch ( aDialerIcon ) + { + case EMbmDialerQgn_indi_dialer_voicemail: + aItemId = KAknsIIDQgnIndiDialerVoicemail; + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// Update icon when skin is changed +// --------------------------------------------------------------------------- +// +void CDialerKeyPadButton::UpdateIconL() + { + if ( KDialerNoIcon != iButtonIconId ) + { + TFileName mifPath( KDriveZ ); + mifPath.Append( KDC_APP_BITMAP_DIR ); + mifPath.Append( KDialerMifFileName ); + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + CFbsBitmap* bitmap (NULL); + CFbsBitmap* mask (NULL); + + // Get icon id. + TAknsItemID skinItemId( KAknsIIDNone ); + MapDialerIconToSkinIcon( iButtonIconId, skinItemId ); + + AknsUtils::CreateColorIconLC( + skin, + skinItemId, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG30, + bitmap, + mask, + mifPath, + iButtonIconId, + iButtonIconMaskId, + KRgbBlack + ); + + CGulIcon* icon = CGulIcon::NewL( bitmap, mask ); + CleanupStack::Pop( 2 ); + + State()->SetIcon( icon ); // icon ownership transfered + } + } + +// --------------------------------------------------------------------------- +// +// Enable or disable audio but keep vibra feedback +// --------------------------------------------------------------------------- +// +void CDialerKeyPadButton::EnableAudioFeedback( const TBool aEnable ) + { + MTouchFeedback* feedback = MTouchFeedback::Instance(); + if ( feedback ) + { + feedback->EnableFeedbackForControl( this, ETrue, aEnable ); + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadButton::HandleResourceChange( TInt aType ) + { + CAknButton::HandleResourceChange( aType ); + + if ( KAknsMessageSkinChange == aType ) + { + TRAP_IGNORE( UpdateIconL() ); + } + } + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/src/cdialerkeypadcontainer.cpp --- a/phoneuis/dialer/src/cdialerkeypadcontainer.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/src/cdialerkeypadcontainer.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007 - 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" @@ -21,7 +21,6 @@ #include #include #include -#include #include #include #include @@ -33,310 +32,59 @@ #include #include // for KDC_APP_RESOURCE_DIR #include +#include +#include #include "cdialerkeypadcontainer.h" #include "dialercommon.h" #include "dialertrace.h" #include "cdialerkeypadbutton.h" -_LIT( KDialerMifFileName, "dialer.mif" ); // Number of buttons in this container const TInt KNumberOfButtons = 12; -// Keypad button images -const TMifDialer KKeyPadButtons[] = +struct TDialerButton + { + TMifDialer iBitmap; + TMifDialer iBitmapMask; + TInt iScanCode; + TInt iKeyCode; + }; + +const TDialerButton KKeyPadButtons[ KNumberOfButtons ] = + { - EMbmDialerQgn_indi_dialer_one, - EMbmDialerQgn_indi_dialer_two, - EMbmDialerQgn_indi_dialer_three, - EMbmDialerQgn_indi_dialer_four, - EMbmDialerQgn_indi_dialer_five, - EMbmDialerQgn_indi_dialer_six, - EMbmDialerQgn_indi_dialer_seven, - EMbmDialerQgn_indi_dialer_eight, - EMbmDialerQgn_indi_dialer_nine, - EMbmDialerQgn_indi_dialer_prefix, - EMbmDialerQgn_indi_dialer_zero, - EMbmDialerQgn_indi_dialer_hash - }; - -// Keypad button image masks -const TMifDialer KKeyPadButtonsMasks[] = - { - EMbmDialerQgn_indi_dialer_one_mask, - EMbmDialerQgn_indi_dialer_two_mask, - EMbmDialerQgn_indi_dialer_three_mask, - EMbmDialerQgn_indi_dialer_four_mask, - EMbmDialerQgn_indi_dialer_five_mask, - EMbmDialerQgn_indi_dialer_six_mask, - EMbmDialerQgn_indi_dialer_seven_mask, - EMbmDialerQgn_indi_dialer_eight_mask, - EMbmDialerQgn_indi_dialer_nine_mask, - EMbmDialerQgn_indi_dialer_prefix_mask, - EMbmDialerQgn_indi_dialer_zero_mask, - EMbmDialerQgn_indi_dialer_hash_mask + { EMbmDialerQgn_indi_dialer_voicemail, + EMbmDialerQgn_indi_dialer_voicemail_mask, + '1', + '1' + }, + { KDialerNoIcon, KDialerNoIcon, + '2', '2' }, + { KDialerNoIcon, KDialerNoIcon, + '3', '3' }, + { KDialerNoIcon, KDialerNoIcon, + '4', '4' }, + { KDialerNoIcon, KDialerNoIcon, + '5', '5' }, + { KDialerNoIcon, KDialerNoIcon, + '6', '6' }, + { KDialerNoIcon, KDialerNoIcon, + '7', '7' }, + { KDialerNoIcon, KDialerNoIcon, + '8', '8' }, + { KDialerNoIcon, KDialerNoIcon, + '9', '9' }, + { KDialerNoIcon, KDialerNoIcon, + EStdKeyNkpAsterisk, '*' }, + { KDialerNoIcon, KDialerNoIcon, + '0', '0' }, + { KDialerNoIcon, KDialerNoIcon, + EStdKeyHash, '#' } }; -// Match keypresses to keyevents send to the phone -// -const TInt TDialerButtonToKeypadMap[12][2] = - { - { 49, // ScanCode - 49 // KeyCode - }, - { 50, - 50 - }, - { 51, - 51 - }, - { 52, - 52 - }, - { 53, - 53 - }, - { 54, - 54 - }, - { 55, - 55 - }, - { 56, - 56 - }, - { 57, - 57 - }, - { EStdKeyNkpAsterisk, - 42 - }, - { '0', - '0' - }, - { EStdKeyHash, - 35 - } - }; -// Class declaration for CDialerKeyPadButton separated to cdialerkeypadbutton.h. - -// --------------------------------------------------------------------------- -// C++ default constructor -// --------------------------------------------------------------------------- -// -CDialerKeyPadButton::CDialerKeyPadButton() - { - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CDialerKeyPadButton::~CDialerKeyPadButton() - { - MTouchFeedback* feedback = MTouchFeedback::Instance(); - if ( feedback ) - { - feedback->RemoveFeedbackForControl( iButton ); - } - delete iButton; - } - -// --------------------------------------------------------------------------- -// Creates number keypad button -// --------------------------------------------------------------------------- -// -void CDialerKeyPadButton::CreateButtonL( const TInt aScanCode, - const TInt aKeyCode, - const TMifDialer aButtonIcon, - const TMifDialer aButtonIconMask ) - { - iScanCode = aScanCode; - iKeyCode = aKeyCode; - iButtonIcon = aButtonIcon; - iButtonIconMask = aButtonIconMask; - - TFileName mifPath( KDriveZ ); - mifPath.Append( KDC_APP_BITMAP_DIR ); - mifPath.Append( KDialerMifFileName ); - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - CFbsBitmap* bitmap (NULL); - CFbsBitmap* mask (NULL); - - // Get icon ids. - TAknsItemID skinItemId( KAknsIIDNone ); - - // Create button image. - MapDialerIconToSkinIcon( aButtonIcon ,skinItemId ); - AknsUtils::CreateColorIconLC( - skin, - skinItemId, - KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG30, - bitmap, - mask, - mifPath, - aButtonIcon, - aButtonIconMask, - KRgbBlack - ); - - CGulIcon* icon = CGulIcon::NewL( bitmap, mask ); - CleanupStack::Pop( 2 ); - CleanupStack::PushL( icon ); - iButton = CAknButton::NewL( - icon , // ownership taken - NULL, NULL, NULL, _L(""), _L(""), 0, 0 ); - iButton->SetButtonFlags( KAknButtonReportOnLongPress| - KAknButtonReportOnKeyDown | - KAknButtonRequestExitOnButtonUpEvent ); - iButton->SetIconScaleMode( EAspectRatioPreserved ); - iButton->SetMargins( TMargins8(0,0,0,0) ); - CleanupStack::Pop( icon ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TInt CDialerKeyPadButton::ScanCode() const - { - return iScanCode; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TInt CDialerKeyPadButton::KeyCode() const - { - return iKeyCode; - } -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CDialerKeyPadButton::MapDialerIconToSkinIcon( const TInt aDialerIcon, - TAknsItemID& aItemId ) const - { - switch ( aDialerIcon ) - { - case EMbmDialerQgn_indi_dialer_one: - aItemId = KAknsIIDQgnIndiDialerOne; - break; - case EMbmDialerQgn_indi_dialer_two: - aItemId = KAknsIIDQgnIndiDialerTwo; - break; - case EMbmDialerQgn_indi_dialer_three: - aItemId = KAknsIIDQgnIndiDialerThree; - break; - case EMbmDialerQgn_indi_dialer_four: - aItemId = KAknsIIDQgnIndiDialerFour; - break; - case EMbmDialerQgn_indi_dialer_five: - aItemId = KAknsIIDQgnIndiDialerFive; - break; - case EMbmDialerQgn_indi_dialer_six: - aItemId = KAknsIIDQgnIndiDialerSix; - break; - case EMbmDialerQgn_indi_dialer_seven: - aItemId = KAknsIIDQgnIndiDialerSeven; - break; - case EMbmDialerQgn_indi_dialer_eight: - aItemId = KAknsIIDQgnIndiDialerEight; - break; - case EMbmDialerQgn_indi_dialer_nine: - aItemId = KAknsIIDQgnIndiDialerNine; - break; - case EMbmDialerQgn_indi_dialer_zero: - aItemId = KAknsIIDQgnIndiDialerZero; - break; - case EMbmDialerQgn_indi_dialer_prefix: - aItemId = KAknsIIDQgnIndiDialerPrefix; - break; - case EMbmDialerQgn_indi_dialer_hash: - aItemId = KAknsIIDQgnIndiDialerHash; - break; - default: - break; - } - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CDialerKeyPadButton::SetIconSize( TSize& aSize ) - { - iButton->SetIconSize( aSize ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CDialerKeyPadButton::UpdateIconL() - { - TFileName mifPath( KDriveZ ); - mifPath.Append( KDC_APP_BITMAP_DIR ); - mifPath.Append( KDialerMifFileName ); - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - CFbsBitmap* bitmap (NULL); - CFbsBitmap* mask (NULL); - - // Get icon id. - TAknsItemID skinItemId( KAknsIIDNone ); - MapDialerIconToSkinIcon( iButtonIcon, skinItemId ); - - AknsUtils::CreateColorIconLC( - skin, - skinItemId, - KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG30, - bitmap, - mask, - mifPath, - iButtonIcon, - iButtonIconMask, - KRgbBlack - ); - - CGulIcon* icon = CGulIcon::NewL( bitmap, mask ); - CleanupStack::Pop( 2 ); - - iButton->State()->SetIcon( icon ); // icon ownership transfered - - } - -// --------------------------------------------------------------------------- -// -// Enable or disable audio but keep vibra feedback -// --------------------------------------------------------------------------- -// -void CDialerKeyPadButton::EnableAudioFeedback( const TBool aEnable ) - { - MTouchFeedback* feedback = MTouchFeedback::Instance(); - if ( feedback ) - { - feedback->EnableFeedbackForControl( iButton, ETrue, aEnable ); - } - } -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CDialerKeyPadButton::HandleResourceChange( TInt aType ) - { - if ( aType == KAknsMessageSkinChange ) - { - TRAP_IGNORE( UpdateIconL() ); - iButton->HandleResourceChange( aType ); - } - } // ========================= MEMBER FUNCTIONS ================================ @@ -366,9 +114,9 @@ { DIALER_PRINT("KeyPadContainer::ConstructL<"); BaseConstructL(); + iKeyLabelManager = CDialerKeyPadLabelManager::NewL( *iCoeEnv, *this ); CreateButtonsL(); - CCoeEnv* env = CCoeEnv::Static(); - env->AddForegroundObserverL( *this ); + iCoeEnv->AddForegroundObserverL( *this ); DIALER_PRINT("KeyPadContainer::ConstructL>"); } @@ -387,14 +135,12 @@ CDialerKeyPadContainer::~CDialerKeyPadContainer() { for ( TInt i = 0; i < iButtonCount; i++ ) - { - AknsUtils::DeregisterControlPosition( - ((CDialerKeyPadButton*)iButtons[i])->Control()); + { delete iButtons[i]; } iButtons.Close(); - CCoeEnv* env = CCoeEnv::Static(); - env->RemoveForegroundObserver( *this ); + iCoeEnv->RemoveForegroundObserver( *this ); + delete iKeyLabelManager; } // --------------------------------------------------------------------------- @@ -417,7 +163,7 @@ __ASSERT_DEBUG( aIndex < KNumberOfButtons, _L("CDialerKeyPadContainer::ComponentControl, index out of range.")); - return ((CDialerKeyPadButton*)iButtons[aIndex])->Control(); + return iButtons[aIndex]; } // --------------------------------------------------------------------------- @@ -465,9 +211,12 @@ // void CDialerKeyPadContainer::SetLayout() { - if ( iOperatingMode == EModeDialer ) + if ( iOperatingMode == EModeDialer || + iOperatingMode == EModeEasyDialing ) { - SetPhoneLayout(); + // Same renewed layout is used regardless of the status + // of Easy Dialing + SetEasyDialingLayout(); } else { @@ -497,20 +246,9 @@ TRect parentRect( Rect() ); - // Icon size - all in same size - TAknLayoutRect functionGraphics; - - functionGraphics.LayoutRect( - parentRect, - TAknWindowComponentLayout::Compose( - AknLayoutScalable_Apps::cell_dialer2_keypad_pane( iVariety ), - AknLayoutScalable_Apps::cell_dialer2_keypad_pane_g1( - iVariety ) ) ); - TSize iconSize = functionGraphics.Rect().Size(); - // Layout buttons TAknLayoutScalableParameterLimits limits = - AknLayoutScalable_Apps::cell_dialer2_keypad_pane_ParamLimits( iVariety ); + AknLayoutScalable_Apps::cell_dialer2_keypad_pane_ParamLimits( iVariety ); TInt i = 0; for ( TInt row = limits.FirstRow(); row <= limits.LastRow(); row++ ) @@ -518,22 +256,63 @@ for ( TInt col = limits.FirstColumn(); col <= limits.LastColumn(); col++ ) { - // Layout button - AknLayoutUtils::LayoutControl( - ((CDialerKeyPadButton*)iButtons[i])->Control(), parentRect, - TAknWindowComponentLayout::Compose( - AknLayoutScalable_Apps::cell_dialer2_keypad_pane( iVariety, - col, row ), - AknLayoutScalable_Apps::bg_button_pane_pane_cp04( - iVariety ) ) ); - - // Set icon size - ((CDialerKeyPadButton*)iButtons[i++])->SetIconSize( iconSize ); + iButtons[i]->SetVariety( iVariety ); + iButtons[i]->SetOperationMode( iOperatingMode ); + + AknLayoutUtils::LayoutControl( iButtons[i], parentRect, TAknWindowComponentLayout::Compose( + AknLayoutScalable_Apps::cell_dialer2_keypad_pane( iVariety, col, row ), + AknLayoutScalable_Apps::bg_button_pane_pane_cp04( iVariety ) ) ); + i++; } } } // --------------------------------------------------------------------------- +// CDialerKeyPadContainer::SetEasyDialingLayout +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadContainer::SetEasyDialingLayout() + { + TRect parentRect( Rect() ); + + // Layout buttons + TAknLayoutScalableParameterLimits limits = + AknLayoutScalable_Apps::cell_dialer2_keypad_pane_ParamLimits( iVariety ); + + // Rectangle of the first button + TAknLayoutRect buttonLayoutRect; + buttonLayoutRect.LayoutRect( parentRect, + AknLayoutScalable_Apps::cell_dia3_key_num_pane( iVariety ) ); + TRect firstButtonRect = buttonLayoutRect.Rect(); + // Move the first button rect to top-left-corner of the keypad area, + // the default place is wrong in mirrored layout. + firstButtonRect.SetRect( parentRect.iTl, firstButtonRect.Size() ); + + TInt colCount = limits.LastColumn() - limits.FirstColumn() + 1; + + for ( TInt row = limits.FirstRow() ; row <= limits.LastRow() ; row++ ) + { + for ( TInt col = limits.FirstColumn() ; col <= limits.LastColumn() ; col++ ) + { + // Calculate corresponding index in iButtons array + TInt idx = col + row * colCount; + + // Set mode and variety so that correct button internal layout will be used + iButtons[idx]->SetVariety( iVariety ); + iButtons[idx]->SetOperationMode( iOperatingMode ); + + // Layout button + TRect buttonRect = firstButtonRect; + buttonRect.Move( col * buttonRect.Width(), row * buttonRect.Height() ); + buttonRect.Shrink( 1, 1 ); // to create small gap between buttons + iButtons[idx]->SetRect( buttonRect ); + } + } + + } + +// --------------------------------------------------------------------------- // CDialerKeyPadContainer::SetVideoLayout // // --------------------------------------------------------------------------- @@ -542,21 +321,8 @@ { TRect parentRect( Rect() ); - // Icon size - all in same size - TAknLayoutRect functionGraphics; - - functionGraphics.LayoutRect( - parentRect, - TAknWindowComponentLayout::Compose( - AknLayoutScalable_Apps::cell_video_dialer_keypad_pane( iVariety, - 0, 0 ), - AknLayoutScalable_Apps::cell_video_dialer_keypad_pane_g1( - iVariety ) ) ); - TSize iconSize = functionGraphics.Rect().Size(); - TAknLayoutScalableParameterLimits limits = - AknLayoutScalable_Apps::cell_video_dialer_keypad_pane_ParamLimits( - iVariety ) ; + AknLayoutScalable_Apps::cell_video_dialer_keypad_pane_ParamLimits( iVariety ) ; TInt i = 0; for ( TInt row = limits.FirstRow(); row <= limits.LastRow(); row++ ) @@ -565,17 +331,17 @@ col <= limits.LastColumn(); col++ ) { + iButtons[i]->SetVariety( iVariety ); + iButtons[i]->SetOperationMode( iOperatingMode ); + // Layout button AknLayoutUtils::LayoutControl( - ((CDialerKeyPadButton*)iButtons[i])->Control(), parentRect, + iButtons[i], parentRect, TAknWindowComponentLayout::Compose( AknLayoutScalable_Apps::cell_video_dialer_keypad_pane( - iVariety, col, row ), - AknLayoutScalable_Apps::bg_button_pane_cp08( - iVariety ) ) ); - - // Set icon size - iButtons[i++]->SetIconSize( iconSize ); + iVariety, col, row ), + AknLayoutScalable_Apps::bg_button_pane_cp08( iVariety ) ) ); + i++; } } } @@ -590,24 +356,37 @@ { DIALER_PRINT("KeyPadContainer::CreateButtonsL<"); - for ( TInt i=0; i < KNumberOfButtons; i++ ) + TInt flags ( KAknButtonReportOnLongPress| + KAknButtonReportOnKeyDown | + KAknButtonRequestExitOnButtonUpEvent ); + + for ( TInt i = 0; i < KNumberOfButtons; i++ ) { - CDialerKeyPadButton* button = new (ELeave) CDialerKeyPadButton(); - CleanupStack::PushL( button ); - button->CreateButtonL( TDialerButtonToKeypadMap[i][0], - TDialerButtonToKeypadMap[i][1], - KKeyPadButtons[i], - KKeyPadButtonsMasks[i] ); + const TPtrC numLabel = iKeyLabelManager->ButtonNumLabel( i ); + + const TPtrC alphaLabel = iKeyLabelManager->ButtonFirstAlphaLabel( i ); + + const TPtrC secondAlphaLabel = iKeyLabelManager->ButtonSecondAlphaLabel( i ); + + CDialerKeyPadButton* button = CDialerKeyPadButton::NewLC( + numLabel, + alphaLabel, + secondAlphaLabel, + KKeyPadButtons[i].iScanCode, + KKeyPadButtons[i].iKeyCode, + KKeyPadButtons[i].iBitmap, + KKeyPadButtons[i].iBitmapMask, + flags ); + iButtons.AppendL( button ); CleanupStack::Pop( button ); - iButtons.Append( button ); - button->Control()->SetMopParent( this ); - button->Control()->SetParent( this ); - button->Control()->SetContainerWindowL( *this ); - button->Control()->SetObserver( this ); - button->Control()->ActivateL(); - AknsUtils::RegisterControlPosition( button->Control() ); + + button->SetMopParent( this ); + button->SetParent( this ); + button->SetContainerWindowL( *this ); + button->SetObserver( this ); + button->ActivateL(); } - DIALER_PRINT("KeyPadContainer::CreateButtonsL>"); + DIALER_PRINT("KeyPadContainer::CreateButtonsL>"); } // --------------------------------------------------------------------------- @@ -635,17 +414,19 @@ CDialerKeyPadButton* tappedButton = NULL; for ( TInt i=0; i < iButtons.Count(); i++ ) { - if ( iButtons[i]->Control() == aControl ) + if ( iButtons[i] == aControl ) { tappedButton = iButtons[i]; break; } } - + + __ASSERT_ALWAYS( tappedButton, + _L("CDialerKeyPadContainer::HandleControlEventL, invalid button handle")); + // Send key event to phone. TKeyEvent keyEvent; keyEvent.iScanCode = tappedButton->ScanCode(); - keyEvent.iCode = tappedButton->KeyCode(); keyEvent.iModifiers = 0; keyEvent.iRepeats = 0; @@ -664,7 +445,7 @@ { DIALER_PRINT("HandleControlEventL.EEventStateChanged"); iButtonPressedDown = ETrue; - + keyEvent.iCode = tappedButton->KeyCode(); iParentControl.PrepareForFocusGainL(); ControlEnv()->SimulateKeyEventL( keyEvent, EEventKeyDown ); @@ -696,8 +477,7 @@ { for ( TInt i=0; i < iButtons.Count(); i++ ) { - (( CDialerKeyPadButton* )iButtons[i])->HandleResourceChange( - aType ); + iButtons[i]->HandleResourceChange( aType ); } } } @@ -705,7 +485,7 @@ // --------------------------------------------------------------------------- // CDialerKeyPadContainer::MakeVisible // -// Called when dialer control come visible or unvisible +// Called when dialer control becomes visible or invisible // // --------------------------------------------------------------------------- // @@ -723,6 +503,17 @@ CCoeControl::MakeVisible( aVisible ); } +// --------------------------------------------------------------------------- +// CDialerKeyPadContainer::SetOperationMode +// +// Set new operation mode for the keypad +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadContainer::SetOperationMode( TDialerOperationMode aOperatingMode ) + { + iOperatingMode = aOperatingMode; + } // --------------------------------------------------------------------------- // CDialerKeyPadContainer::HandleGainingForeground @@ -755,6 +546,30 @@ } // --------------------------------------------------------------------------- +// CDialerKeyPadContainer::KeyLabelsChanged +// +// Reset button labels and update the layout +// --------------------------------------------------------------------------- +// +void CDialerKeyPadContainer::KeyLabelsChanged() + { + for ( TInt i = 0 ; i < iButtons.Count() ; i++ ) + { + const TPtrC numLabel = iKeyLabelManager->ButtonNumLabel( i ); + const TPtrC alphaLabel = iKeyLabelManager->ButtonFirstAlphaLabel( i ); + const TPtrC secondAlphaLabel = iKeyLabelManager->ButtonSecondAlphaLabel( i ); + + iButtons[i]->SetNumLabel( numLabel ); + iButtons[i]->SetPrimaryAlphaLabel( alphaLabel ); + iButtons[i]->SetSecondaryAlphaLabel( secondAlphaLabel ); + + // reset layout + iButtons[i]->SetSize( iButtons[i]->Size() ); + } + DrawDeferred(); + } + +// --------------------------------------------------------------------------- // CDialerKeyPadContainer::EnableTactileFeedback // // diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/src/cdialerkeypadlabelmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/src/cdialerkeypadlabelmanager.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,659 @@ +/* +* Copyright (c) 2009, 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: Helper class to handle virtual keypad text labels +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cdialerkeypadlabelmanager.h" +#include "dialercommon.h" + +// CONSTANTS +const TInt KKeyCount( 12 ); + +_LIT( KDialerButton1NumLabel, "1" ); +_LIT( KDialerButton2NumLabel, "2" ); +_LIT( KDialerButton3NumLabel, "3" ); +_LIT( KDialerButton4NumLabel, "4" ); +_LIT( KDialerButton5NumLabel, "5" ); +_LIT( KDialerButton6NumLabel, "6" ); +_LIT( KDialerButton7NumLabel, "7" ); +_LIT( KDialerButton8NumLabel, "8" ); +_LIT( KDialerButton9NumLabel, "9" ); +_LIT( KDialerButton10NumLabel, "*+" ); +_LIT( KDialerButton11NumLabel, "0" ); +_LIT( KDialerButton12NumLabel, "#" ); + +_LIT( KDialerKeypadResourceFile, "z:\\resource\\dialerkeypad" ); +_LIT( KDialerKeypadResourceFileExt, ".rsc" ); +_LIT( KDialerKeypadVariantExtSeparator, "_" ); + +_LIT( KScriptLatin, "latin" ); +_LIT( KScriptCyrillic, "cyrillic" ); +_LIT( KScriptGreek, "greek" ); +_LIT( KScriptHebrew, "hebrew" ); +_LIT( KScriptArabic, "arabic" ); +_LIT( KScriptFarsi, "farsi" ); +_LIT( KScriptUrdu, "urdu" ); +_LIT( KScriptThai, "thai" ); +_LIT( KScriptDevanagari, "devanagari" ); +_LIT( KScriptChnPinyin, "chn_pinyin" ); +_LIT( KScriptChnZhuyin, "chn_zhuyin" ); +_LIT( KScriptChnStroke, "chn_stroke" ); +_LIT( KScriptChnCangjie, "chn_cangjie" ); + +enum TScript + { + EScriptLatin = 0, + EScriptCyrillic, + EScriptGreek, + EScriptHebrew, + EScriptArabic, + EScriptFarsi, + EScriptUrdu, + EScriptThai, + EScriptDevanagari, + EScriptChinese, // generic value for all Chinese input modes + EScriptChnPinyin, + EScriptChnZhuyin, + EScriptChnStroke, + EScriptChnCangjie + }; + +struct TLanguageScriptMapping + { + TLanguage iLang; + TScript iScript; + }; + +// Following table maps non-Latin languages to corresponding scripts. +// Rest of the languages are asumed to use Latin script. +// The data of the table has been extracted from the header +// \sf\mw\inputmethods\textinput\peninputgenericitut\inc\peninputgenericitutdata.h +const TLanguageScriptMapping KScriptMap[] = + { + {ELangRussian, EScriptCyrillic}, + {ELangBulgarian, EScriptCyrillic}, + {ELangUkrainian, EScriptCyrillic}, + + {ELangGreek, EScriptGreek}, + {ELangCyprusGreek, EScriptGreek}, + + {ELangHebrew, EScriptHebrew}, + + {ELangArabic, EScriptArabic}, + + {ELangFarsi, EScriptFarsi}, + + {ELangUrdu, EScriptUrdu}, + + {ELangThai, EScriptThai}, + + {ELangHindi, EScriptDevanagari}, + {ELangMarathi, EScriptDevanagari}, + + {ELangTaiwanChinese, EScriptChinese}, + {ELangHongKongChinese, EScriptChinese}, + {ELangPrcChinese, EScriptChinese} + }; +const TInt KScriptMapCount = sizeof( KScriptMap ) / sizeof( TLanguageScriptMapping ); + +// Values for Chinese adaptive search modes, as documented in AvkonInternalCRKeys.h +enum TChinesePrcMode + { + EChnPrcPinyin = 0, + EChnPrcStroke = 1 + }; +enum TChineseTwMode + { + EChnTwZhuyin = 0, + EChnTwStroke = 1 + }; +enum TChineseHkMode + { + EChnHkStroke = 0, + EChnHkCangjie = 1 + }; + + +// LOCAL FUNCTION DECLARATIONS +static TScript ScriptForLang( TLanguage aLang ); +static const TDesC& ScriptName( TScript aScriptCode ); +static TBool ScriptCanSubstituteLatin( TScript aScript ); + + +// MEMBER FUNCTION DEFINITIONS + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::CDialerKeyPadLabelManager +// +// --------------------------------------------------------------------------- +// +CDialerKeyPadLabelManager::CDialerKeyPadLabelManager( CCoeEnv& aCoeEnv, + MDialerKeyPadLabelManagerCallback& aObserver ) + : iCoeEnv( aCoeEnv ), iObserver( aObserver ) + { + // No implementation required + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::~CDialerKeyPadLabelManager +// +// --------------------------------------------------------------------------- +// +CDialerKeyPadLabelManager::~CDialerKeyPadLabelManager() + { + delete iPtiEngine; + + delete iAknFepRepository; + delete iAvkonRepository; + + if ( iEnvChangeNotifier ) + { + iEnvChangeNotifier->Cancel(); + delete iEnvChangeNotifier; + } + + delete iKeypadNumLabelArray; + delete iKeypadFirstLabelArray; + delete iKeypadSecondLabelArray; + + if ( iResourceOffset ) + { + iCoeEnv.DeleteResourceFile( iResourceOffset ); + } + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::NewLC +// +// --------------------------------------------------------------------------- +// +CDialerKeyPadLabelManager* CDialerKeyPadLabelManager::NewLC( CCoeEnv& aCoeEnv, + MDialerKeyPadLabelManagerCallback& aObserver ) + { + CDialerKeyPadLabelManager* self = + new (ELeave) CDialerKeyPadLabelManager( aCoeEnv, aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::NewL +// +// --------------------------------------------------------------------------- +// +CDialerKeyPadLabelManager* CDialerKeyPadLabelManager::NewL( CCoeEnv& aCoeEnv, + MDialerKeyPadLabelManagerCallback& aObserver ) + { + CDialerKeyPadLabelManager* self = + CDialerKeyPadLabelManager::NewLC( aCoeEnv, aObserver ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::ConstructL +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadLabelManager::ConstructL() + { + iPtiEngine = CPtiEngine::NewL(); + + iAknFepRepository = CDialerCenRepWrapper::NewL( *this, KCRUidAknFep ); + iAvkonRepository = CDialerCenRepWrapper::NewL( *this, KCRUidAvkon ); + + TCallBack envChangeCallback( EnvChangeCallback, this ); + iEnvChangeNotifier = CEnvironmentChangeNotifier::NewL( + CActive::EPriorityStandard, envChangeCallback ); + iEnvChangeNotifier->Start(); + + iKeypadNumLabelArray = new ( ELeave ) CDesCArrayFlat( KKeyCount ); + iKeypadFirstLabelArray = new ( ELeave ) CDesCArrayFlat( KKeyCount ); + iKeypadSecondLabelArray = new ( ELeave ) CDesCArrayFlat( KKeyCount ); + + UpdateNumLabelsL(); + UpdateTextLabelsL(); + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::ButtonNumLabel +// +// --------------------------------------------------------------------------- +// +TPtrC CDialerKeyPadLabelManager::ButtonNumLabel( TInt aIndex ) const + { + __ASSERT_DEBUG( aIndex < iKeypadNumLabelArray->Count(), DialerPanic(EDialerPanicLabelNotFound) ); + + TPtrC label( KNullDesC ); + if ( aIndex < iKeypadNumLabelArray->Count() ) + { + label.Set( (*iKeypadNumLabelArray)[ aIndex ] ); + } + return label; + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::ButtonFirstAlphaLabel +// +// --------------------------------------------------------------------------- +// +TPtrC CDialerKeyPadLabelManager::ButtonFirstAlphaLabel( TInt aIndex ) const + { + __ASSERT_DEBUG( aIndex < iKeypadFirstLabelArray->Count(), DialerPanic(EDialerPanicLabelNotFound) ); + + TPtrC label( KNullDesC ); + if ( aIndex < iKeypadFirstLabelArray->Count() ) + { + label.Set( (*iKeypadFirstLabelArray)[ aIndex ] ); + } + return label; + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::ButtonSecondAlphaLabel +// +// --------------------------------------------------------------------------- +// +TPtrC CDialerKeyPadLabelManager::ButtonSecondAlphaLabel( TInt aIndex ) const + { + __ASSERT_DEBUG( aIndex < iKeypadSecondLabelArray->Count(), DialerPanic(EDialerPanicLabelNotFound) ); + + TPtrC label( KNullDesC ); + if ( aIndex < iKeypadSecondLabelArray->Count() ) + { + label.Set( (*iKeypadSecondLabelArray)[ aIndex ] ); + } + return label; + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::UpdateTextLabelsL +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadLabelManager::HandleRepositoryChange( + TUid aRepository, TUint32 aId ) + { + if ( (aRepository == KCRUidAknFep && aId == KAknFepInputTxtLang) || + (aRepository == KCRUidAvkon && aId == KAknAdaptiveSearchChinesePRC) || + (aRepository == KCRUidAvkon && aId == KAknAdaptiveSearchChineseTW) || + (aRepository == KCRUidAvkon && aId == KAknAdaptiveSearchChineseHongkong) ) + { + // Check if alpabet labels need to be changed + TInt scriptToUse( EScriptLatin ); + TRAP_IGNORE( scriptToUse = LabelScriptToUseL() ); + if ( iLabelScriptInUse != scriptToUse ) + { + TRAP_IGNORE( UpdateTextLabelsL() ); + iObserver.KeyLabelsChanged(); + } + } + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::HandleEnvChange +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadLabelManager::HandleEnvChange() + { + if ( iEnvChangeNotifier->Change() & EChangesLocale ) + { + TLocale locale; + if ( locale.DigitType() != iDigitTypeInUse ) + { + TRAP_IGNORE( UpdateNumLabelsL() ); + iObserver.KeyLabelsChanged(); + } + } + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::EnvChangeCallback +// +// --------------------------------------------------------------------------- +// +TInt CDialerKeyPadLabelManager::EnvChangeCallback( TAny* aSelfPtr ) + { + CDialerKeyPadLabelManager* self = + static_cast< CDialerKeyPadLabelManager* >( aSelfPtr ); + self->HandleEnvChange(); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::UpdateTextLabelsL +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadLabelManager::UpdateTextLabelsL() + { + iKeypadFirstLabelArray->Reset(); + iKeypadSecondLabelArray->Reset(); + + // Load the correct keypad resource file + TFileName resourceName; + GetResourceFileNameL( resourceName ); + iResourceOffset = iCoeEnv.AddResourceFileL( resourceName ); + + // Read keypad labels from the resource + TResourceReader reader; + iCoeEnv.CreateResourceReaderLC( reader, R_DIALER_KEYPAD ); + + TInt16 count = reader.ReadInt16(); + + for ( TInt i = 0 ; i < count ; ++i ) + { + TPtrC firstRow = reader.ReadTPtrC(); + iKeypadFirstLabelArray->AppendL( firstRow ); + TPtrC secondRow = reader.ReadTPtrC(); + iKeypadSecondLabelArray->AppendL( secondRow ); + } + + CleanupStack::PopAndDestroy(); // reader + + // Free resource as it's not usually needed anymore. Ensure that destructor + // won't free it again. + iCoeEnv.DeleteResourceFile( iResourceOffset ); + iResourceOffset = 0; + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::UpdateNumLabelsL +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadLabelManager::UpdateNumLabelsL() + { + // Save digit type used. This is to allow us update number labels + // only when digit type is changed and not on all locale changes. + TLocale locale; + iDigitTypeInUse = locale.DigitType(); + + iKeypadNumLabelArray->Reset(); + + // Fill number labels array + iKeypadNumLabelArray->AppendL( KDialerButton1NumLabel ); + iKeypadNumLabelArray->AppendL( KDialerButton2NumLabel ); + iKeypadNumLabelArray->AppendL( KDialerButton3NumLabel ); + iKeypadNumLabelArray->AppendL( KDialerButton4NumLabel ); + iKeypadNumLabelArray->AppendL( KDialerButton5NumLabel ); + iKeypadNumLabelArray->AppendL( KDialerButton6NumLabel ); + iKeypadNumLabelArray->AppendL( KDialerButton7NumLabel ); + iKeypadNumLabelArray->AppendL( KDialerButton8NumLabel ); + iKeypadNumLabelArray->AppendL( KDialerButton9NumLabel ); + iKeypadNumLabelArray->AppendL( KDialerButton10NumLabel ); + iKeypadNumLabelArray->AppendL( KDialerButton11NumLabel ); + iKeypadNumLabelArray->AppendL( KDialerButton12NumLabel ); + + // Convert num labels to current global number mode + for ( TInt i = 0 ; i < iKeypadNumLabelArray->Count() ; ++i ) + { + // A bit of magic is needed to get a modifiable pointer + // descriptor which points to string within the array. + TPtrC roPtr = (*iKeypadNumLabelArray)[i]; + TPtr ptr( const_cast( roPtr.Ptr() ), roPtr.Length(), roPtr.Length() ); + + AknTextUtils::LanguageSpecificNumberConversion( ptr ); + } + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::GetResourceFileNameL +// +// --------------------------------------------------------------------------- +// +void CDialerKeyPadLabelManager::GetResourceFileNameL( TDes& aFileName ) + { + TFileName resName; + + iLabelScriptInUse = LabelScriptToUseL(); + // Try to get variated resource name if necessary + if ( iLabelScriptInUse != EScriptLatin ) + { + const TDesC& scriptName = ScriptName( static_cast(iLabelScriptInUse) ); + resName.Copy( KDialerKeypadResourceFile ); + resName.Append( KDialerKeypadVariantExtSeparator ); + resName.Append( scriptName ); + resName.Append( KDialerKeypadResourceFileExt ); + + BaflUtils::NearestLanguageFile( iCoeEnv.FsSession(), resName ); + if ( !BaflUtils::FileExists( iCoeEnv.FsSession(), resName ) ) + { + // resource not found, fall back to Latin + iLabelScriptInUse = EScriptLatin; + } + } + + // Get the default resource name if Latin script was selected or + // resource file for the selected script was not found. + if ( iLabelScriptInUse == EScriptLatin ) + { + resName.Copy( KDialerKeypadResourceFile ); + resName.Append( KDialerKeypadResourceFileExt ); + BaflUtils::NearestLanguageFile( iCoeEnv.FsSession(), resName ); + } + + aFileName.Copy( resName ); + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::LabelScriptToUseL +// +// --------------------------------------------------------------------------- +// +TInt CDialerKeyPadLabelManager::LabelScriptToUseL() const + { + TInt lang( ELangEnglish ); + + // Get current input language + TInt err = iAknFepRepository->Get( KAknFepInputTxtLang, lang ); + __ASSERT_DEBUG( !err, DialerPanic(err) ); + + TInt script = ScriptForLang( static_cast(lang) ); + + // Distinct logic is used to select labels when current input language + // is any version of Chinese. PCS uses different algorith for Chinese. + if ( script == EScriptChinese ) + { + script = ChineseScriptToUseL(); + } + // If current input language is written in Latin script, then we check + // if some other script of the device could also be shown on the labels. + // Most variated labels include Latin characters as well. + else if ( script == EScriptLatin ) + { + RArray availableLanguages; + CleanupClosePushL( availableLanguages ); + iPtiEngine->GetAvailableLanguagesL( availableLanguages ); + + // Scirpt of the current UI language is preferred option for + // alternative script. Ensure it's considered first. + TLanguage uiLang = User::Language(); + TInt pos = availableLanguages.Find( uiLang ); + if ( pos != KErrNotFound ) + { + availableLanguages.Remove( pos ); + availableLanguages.InsertL( uiLang, 0 ); + } + + TInt langCount = availableLanguages.Count(); + for ( TInt i = 0 ; i < langCount ; ++i ) + { + TLanguage altLang = static_cast( availableLanguages[i] ); + TScript altScript = ScriptForLang( altLang ); + if ( altScript != EScriptLatin && ScriptCanSubstituteLatin(altScript) ) + { + // Suitable alternative script found. Use its labels + // instead of showing only Latin alphabets. + script = altScript; + i = langCount; // to break out + } + } + + CleanupStack::PopAndDestroy( &availableLanguages ); + } + + return script; + } + +// --------------------------------------------------------------------------- +// CDialerKeyPadLabelManager::ChineseScriptToUseL +// +// --------------------------------------------------------------------------- +// +TInt CDialerKeyPadLabelManager::ChineseScriptToUseL() const + { + TInt script( EScriptLatin ); + + TInt lang( ELangPrcChinese ); + TInt chnSearchMode( 0 ); + + TInt err = iAknFepRepository->Get( KAknFepInputTxtLang, lang ); + __ASSERT_DEBUG( !err, DialerPanic(EDialerPanicChineseScriptError) ); + + switch ( lang ) + { + case ELangPrcChinese: + { + err = iAvkonRepository->Get( KAknAdaptiveSearchChinesePRC, chnSearchMode ); + script = ( chnSearchMode == EChnPrcPinyin ? EScriptChnPinyin : EScriptChnStroke ); + } + break; + case ELangTaiwanChinese: + { + err = iAvkonRepository->Get( KAknAdaptiveSearchChineseTW, chnSearchMode ); + script = ( chnSearchMode == EChnTwZhuyin ? EScriptChnZhuyin : EScriptChnStroke ); + } + break; + case ELangHongKongChinese: + { + err = iAvkonRepository->Get( KAknAdaptiveSearchChineseHongkong, chnSearchMode ); + script = ( chnSearchMode == EChnHkStroke ? EScriptChnStroke : EScriptChnCangjie ); + } + break; + default: + { + err = KErrUnknown; + } + break; + } + __ASSERT_DEBUG( !err, DialerPanic(EDialerPanicChineseScriptError) ); + + return script; + } + + +// LOCAL FUNCTION DEFINITIONS + +// --------------------------------------------------------------------------- +// ScriptForLang +// +// --------------------------------------------------------------------------- +// +static TScript ScriptForLang( TLanguage aLang ) + { + TScript script( EScriptLatin ); + for ( TInt i = 0 ; i < KScriptMapCount ; ++i ) + { + if ( aLang == KScriptMap[i].iLang ) + { + script = KScriptMap[i].iScript; + i = KScriptMapCount; // to break out + } + } + return script; + } + +// --------------------------------------------------------------------------- +// ScriptName +// +// --------------------------------------------------------------------------- +// +static const TDesC& ScriptName( TScript aScriptCode ) + { + // Convert script ID to script name + switch ( aScriptCode ) + { + case EScriptLatin: + return KScriptLatin; + case EScriptCyrillic: + return KScriptCyrillic; + case EScriptGreek: + return KScriptGreek; + case EScriptHebrew: + return KScriptHebrew; + case EScriptArabic: + return KScriptArabic; + case EScriptFarsi: + return KScriptFarsi; + case EScriptUrdu: + return KScriptUrdu; + case EScriptThai: + return KScriptThai; + case EScriptDevanagari: + return KScriptDevanagari; + case EScriptChnPinyin: + return KScriptChnPinyin; + case EScriptChnZhuyin: + return KScriptChnZhuyin; + case EScriptChnStroke: + return KScriptChnStroke; + case EScriptChnCangjie: + return KScriptChnCangjie; + default: + __ASSERT_DEBUG( EFalse, DialerPanic(EDialerPanicUnknownScript) ); + } + return KNullDesC; + } + +// --------------------------------------------------------------------------- +// ScriptCanSubstituteLatin +// Return ETrue if labels of given script can be used instead of Latin labels +// when current input language is written with Latin script. This requires +// that the labels include also Latin characters and that labels don't contain +// any characters which would only make sense in some specific input mode. +// --------------------------------------------------------------------------- +// +static TBool ScriptCanSubstituteLatin( TScript aScript ) + { + // It would be better to figure this out from the resources but that would + // require opening and parsing several resource files. + return !( aScript == EScriptArabic || + aScript == EScriptUrdu || + aScript == EScriptFarsi || + aScript == EScriptChinese || + aScript == EScriptChnPinyin || + aScript == EScriptChnZhuyin || + aScript == EScriptChnStroke || + aScript == EScriptChnCangjie ); + } + +// end of file + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/src/cdialernumberentry.cpp --- a/phoneuis/dialer/src/cdialernumberentry.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/src/cdialernumberentry.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -44,10 +44,13 @@ #include "dialertrace.h" #include "dialer.hrh" #include "mnumberentry.h" - +#include +#include const TInt KNumberEntryControlCount = 2; // = number entry, label +_LIT( KPhoneValidChars, "0123456789*#+pwPW" ); + // ========================= MEMBER FUNCTIONS ================================ // --------------------------------------------------------------------------- @@ -76,7 +79,7 @@ // void CDialerNumberEntry::ConstructL() { - DIALER_PRINT("numberentry::ConstructL<"); + DIALER_PRINT("numberentry::ConstructL<"); BaseConstructL(); // Create number entry editor @@ -106,6 +109,9 @@ iLabel->SetTextL( KNullDesC ); iLabel->MakeVisible( EFalse ); CheckLabelSkinningColor(); + + iAppUi = iEikonEnv->EikAppUi(); + __ASSERT_ALWAYS( iAppUi, DialerPanic( EDialerPanicNoApplicationInstance ) ); ActivateL(); DIALER_PRINT("numberentry::ConstructL>"); @@ -128,7 +134,6 @@ delete iEditor; delete iFrameContext; delete iLabel; - } @@ -146,11 +151,11 @@ // CDialerNumberEntry::SetFocus // --------------------------------------------------------------------------- // -void CDialerNumberEntry::SetFocus( TBool aFocus, - TDrawNow /*aDrawNow*/ ) +void CDialerNumberEntry::SetFocus( TBool aFocus, TDrawNow aDrawNow ) { DIALER_PRINT("numberentry::SetFocus<"); + CCoeControl::SetFocus( aFocus, aDrawNow ); iEditor->SetFocus( aFocus ); DIALER_PRINT("numberentry::SetFocus>"); @@ -211,6 +216,12 @@ DIALER_PRINT("numberentry::SetTextToNumberEntry<"); iEditor->SetText( aDesC ); + + if ( iEasyDialer && iOperationMode == EModeEasyDialing ) + { + TRAP_IGNORE( iEasyDialer->SetInputL( aDesC ) ); + } + iEditor->DrawNow(); DIALER_PRINT("numberentry::SetTextToNumberEntry>"); @@ -220,9 +231,18 @@ // CDialerNumberEntry::GetTextFromNumberEntry // --------------------------------------------------------------------------- // -void CDialerNumberEntry::GetTextFromNumberEntry( TDes& aDesC ) +void CDialerNumberEntry::GetTextFromNumberEntry( TDes& aDes ) { - iEditor->GetText( aDesC ); + iEditor->GetText( aDes ); + } + +// --------------------------------------------------------------------------- +// CDialerNumberEntry::Text +// --------------------------------------------------------------------------- +// +TPtrC CDialerNumberEntry::Text() const + { + return iEditor->Text(); } // --------------------------------------------------------------------------- @@ -301,15 +321,15 @@ { DIALER_PRINT("numberentry::HandleControlEventL<"); - TInt format( KDialerNELayoutLargeFont ); if ( aControl == iEditor && aEventType == EEventStateChanged ) { HandleEditorFormatting(); + InformNumberEntryState(); - iEditor->DrawDeferred(); + iEditor->DrawDeferred(); } - + DIALER_PRINT("numberentry::HandleControlEventL>"); } @@ -320,8 +340,22 @@ TKeyResponse CDialerNumberEntry::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) - { - return iEditor->OfferKeyEventL( aKeyEvent, aType ); + { + TKeyResponse handled = EKeyWasNotConsumed; + + // First, offer keyevent to easy dialer. + if (iEasyDialer) + { + handled = iEasyDialer->OfferKeyEventL(aKeyEvent, aType); + } + + // Then to number entry editor. + if (handled == EKeyWasNotConsumed) + { + handled = iEditor->OfferKeyEventL(aKeyEvent, aType); + } + + return handled; } // --------------------------------------------------------------------------- @@ -398,14 +432,15 @@ AknsUtils::RegisterControlPosition( this ); TDialerVariety variety( EDialerVarietyLandscape ); - if ( !Layout_Meta_Data::IsLandscapeOrientation() ) + if ( !Layout_Meta_Data::IsLandscapeOrientation() ) { variety = EDialerVarietyPortrait; } TRect parentRect( Rect() ); - TAknTextComponentLayout neLayout = - AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety ); + TAknTextComponentLayout neLayout = ( iOperationMode == EModeEasyDialing ? + AknLayoutScalable_Apps::dia3_numentry_pane_t1( variety ) : + AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety ) ); AknLayoutUtils::LayoutControl( iEditor, parentRect, @@ -418,13 +453,13 @@ neLayout.H() ); - UpdateNumberEntryFormats(); - RectFrameInnerOuterRects( - Rect(), + parentRect, iOuterRect, iInnerRect ); + UpdateNumberEntryFormats(); + iFrameContext->SetFrameRects( iOuterRect, iInnerRect ); MAknsSkinInstance* skin = AknsUtils::SkinInstance(); @@ -438,15 +473,13 @@ // Portrait variety is temporarily used also in landscape. // Landscape layout data is now unavailable. TAknTextComponentLayout labelLayout = - AknLayoutScalable_Apps::dialer2_ne_pane_t2( - EDialerVarietyPortrait ); + AknLayoutScalable_Apps::dialer2_ne_pane_t2( EDialerVarietyPortrait ); // Temporary solution - labelLayout.Setl(neLayout.l()); + labelLayout.Setl( neLayout.l() ); AknLayoutUtils::LayoutLabel( iLabel, parentRect, labelLayout ); HandleEditorFormatting(); iEditor->DrawDeferred(); - } // --------------------------------------------------------------------------- @@ -502,111 +535,62 @@ void CDialerNumberEntry::CalculateLayout( CAknPhoneNumberEditor::TFormat& aFormat, TInt aNEVariety ) { - TAknLayoutText textsLargeFontLine1Text; - TAknLayoutText textsLargeFontLine2Text; - TAknLayoutText textsLargeFontLine3Text; - - TAknLayoutText textsSmallFontLine1Text; - TAknLayoutText textsSmallFontLine2Text; - TAknLayoutText textsSmallFontLine3Text; - - const CAknLayoutFont* layoutFont; - - switch ( aNEVariety ) - { - case KDialerNELayoutLargeFont: - { - TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 2 : 0; - - TAknLayoutScalableParameterLimits limits = - AknLayoutScalable_Apps::dialer2_ne_pane_t1_ParamLimits( - variety ); - //Line 1 - textsLargeFontLine1Text.LayoutText( Rect(), - AknLayoutScalable_Apps::dialer2_ne_pane_t1( - variety, 0, 0 ) ); - //Line 2 - textsLargeFontLine2Text.LayoutText( Rect(), - AknLayoutScalable_Apps::dialer2_ne_pane_t1( - variety, - 0, - 1 ) ); - //Last row - textsLargeFontLine3Text.LayoutText( Rect(), - AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety, - 0, - limits.LastRow() ) ); + TAknLayoutText textsLine1Text; + TAknLayoutText textsLine2Text; + + if ( iOperationMode == EModeEasyDialing ) + { + TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; + textsLine1Text.LayoutText( Rect(), AknLayoutScalable_Apps::dia3_numentry_pane_t1(variety) ); + textsLine2Text = textsLine1Text; + } + else + { + TInt variety = 0; + if ( aNEVariety == KDialerNELayoutLargeFont ) + { + variety = Layout_Meta_Data::IsLandscapeOrientation() ? 2 : 0; + } + else + { + variety = Layout_Meta_Data::IsLandscapeOrientation() ? 3 : 1; + } - //Need to add one row because zero is the first line - aFormat.iNumLines = limits.LastRow()+1; - - //take font from line 1 - aFormat.iFont = textsLargeFontLine1Text.Font(); - layoutFont = CAknLayoutFont::AsCAknLayoutFontOrNull( aFormat.iFont); - aFormat.iBottomBaselineOffset = - layoutFont->BaselineToTextPaneBottom(); - //outer rect from last line - aFormat.iOuterRect = textsLargeFontLine3Text.TextRect(); - // have to add extra gap - aFormat.iOuterRect.iTl.iY -= aFormat.iBottomBaselineOffset; - - //calculate baselineSeparation from the difference of the second - //line and the first line bottom right Y coordinates - TInt baselineSeparation = textsLargeFontLine2Text.TextRect().iBr.iY - - textsLargeFontLine1Text.TextRect().iBr.iY; - - aFormat.iOuterRect.iTl.iY -= ( (aFormat.iNumLines - 1) - * baselineSeparation ); - aFormat.iBaselineSeparation = baselineSeparation; - } - break; - case KDialerNELayoutSmallFont: - { - TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 3 : 1; - - TAknLayoutScalableParameterLimits limits = - AknLayoutScalable_Apps::dialer2_ne_pane_t1_ParamLimits( - variety ); - //Line 1 - textsSmallFontLine1Text.LayoutText( Rect(), - AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety,0,0 ) ); - //Line 2 - textsSmallFontLine2Text.LayoutText( Rect(), - AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety,0,1 ) ); - //Last row - textsSmallFontLine3Text.LayoutText( Rect(), - AknLayoutScalable_Apps::dialer2_ne_pane_t1( - variety, - 0, - limits.LastRow() ) ); - - //Need to add one row because zero is the first line - aFormat.iNumLines = limits.LastRow()+1; - - //take font from line 1 - aFormat.iFont = textsSmallFontLine1Text.Font(); - layoutFont = CAknLayoutFont::AsCAknLayoutFontOrNull( - aFormat.iFont); - aFormat.iBottomBaselineOffset = - layoutFont->BaselineToTextPaneBottom(); - //outer rect from line 3 - aFormat.iOuterRect = textsSmallFontLine3Text.TextRect(); - // have to add extra gap - aFormat.iOuterRect.iTl.iY -= aFormat.iBottomBaselineOffset; - - //calculate baselineSeparation from the difference of the second - //line and the first line bottom right Y coordinates - TInt baselineSeparation = textsSmallFontLine2Text.TextRect().iBr.iY - - textsSmallFontLine1Text.TextRect().iBr.iY; - - aFormat.iOuterRect.iTl.iY -= ( (aFormat.iNumLines - 1) - * baselineSeparation ); - aFormat.iBaselineSeparation = baselineSeparation; - } - break; - default: - break; - } + //Line 1 + textsLine1Text.LayoutText( Rect(), + AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety, 0, 0 ) ); + //Line 2 + textsLine2Text.LayoutText( Rect(), + AknLayoutScalable_Apps::dialer2_ne_pane_t1( variety, 0, 1 ) ); + } + + //take font from line 1 + aFormat.iFont = textsLine1Text.Font(); + const CAknLayoutFont* layoutFont = CAknLayoutFont::AsCAknLayoutFontOrNull( aFormat.iFont ); + aFormat.iBottomBaselineOffset = layoutFont->BaselineToTextPaneBottom(); + + // Calculate baselineSeparation from the difference of the second + // line and the first line bottom right Y coordinates. + TInt baselineSeparation = + textsLine2Text.TextRect().iBr.iY - textsLine1Text.TextRect().iBr.iY; + aFormat.iBaselineSeparation = baselineSeparation; + + // Outer rect of the text editor is the inner rect of the whole text box + aFormat.iOuterRect = iInnerRect; + + aFormat.iNumLines = 1; + + // If multiline layout is to be used, the exact number of lines is calculated + // based on available area and the row height (i.e. baselineSeparation) + if ( baselineSeparation > 0 && baselineSeparation < iInnerRect.Height() ) + { + aFormat.iNumLines = ( iInnerRect.Height() / baselineSeparation ); + + // Center editor vertically to the available area. + TInt editorHeight = aFormat.iNumLines * baselineSeparation; + TInt deltaHeight = ( iInnerRect.Height() - editorHeight ) / 2; + aFormat.iOuterRect.Shrink( 0, deltaHeight ); + } } // --------------------------------------------------------------------------- @@ -622,6 +606,24 @@ CheckLabelSkinningColor(); } } + +// --------------------------------------------------------------------------- +// CDialerNumberEntry::HandlePointerEventL +// --------------------------------------------------------------------------- +// +void CDialerNumberEntry::HandlePointerEventL( const TPointerEvent& aPointerEvent ) + { + // Normal pointer event handling and delegation to editor component + // happens only if we are already in focus. Otherwise we just take the + // focus. This is to prevent accidental cursor movements as putting the + // cursor back to the end of the text is difficult for right-aligned + // text. + if ( iEditor->IsFocused() ) + { + CCoeControl::HandlePointerEventL( aPointerEvent ); + } + } + // --------------------------------------------------------------------------- // CDialerNumberEntry::HandleEditorFormatting // --------------------------------------------------------------------------- @@ -679,41 +681,51 @@ TRect& aOuterRect, TRect& aInnerRect ) { - if ( Layout_Meta_Data::IsMirrored() ) + if ( iOperationMode == EModeEasyDialing ) { - TAknLayoutRect frameTopRight; - frameTopRight.LayoutRect( - aFrameRect, - AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g3().LayoutLine() ); - - TAknLayoutRect frameBottomLeft; - frameBottomLeft.LayoutRect( - aFrameRect, - AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g4().LayoutLine() ); - - aOuterRect = TRect( frameTopRight.Rect().iTl, - frameBottomLeft.Rect().iBr ); - - aInnerRect = TRect( frameTopRight.Rect().iBr, - frameBottomLeft.Rect().iTl ); + aOuterRect = Rect(); + TAknLayoutRect innerRectLayout; + innerRectLayout.LayoutRect( aOuterRect, AknLayoutScalable_Apps::bg_dia3_numentry_pane_g1() ); + aInnerRect = innerRectLayout.Rect(); } else { - TAknLayoutRect frameTopLeft; - frameTopLeft.LayoutRect( - aFrameRect, - AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g2().LayoutLine() ); - - TAknLayoutRect frameBottomRight; - frameBottomRight.LayoutRect( - aFrameRect, - AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g5().LayoutLine() ); - - aOuterRect = TRect( frameTopLeft.Rect().iTl, - frameBottomRight.Rect().iBr ); - aInnerRect = TRect( frameTopLeft.Rect().iBr, - frameBottomRight.Rect().iTl ); - } + if ( Layout_Meta_Data::IsMirrored() ) + { + TAknLayoutRect frameTopRight; + frameTopRight.LayoutRect( + aFrameRect, + AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g3().LayoutLine() ); + + TAknLayoutRect frameBottomLeft; + frameBottomLeft.LayoutRect( + aFrameRect, + AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g4().LayoutLine() ); + + aOuterRect = TRect( frameTopRight.Rect().iTl, + frameBottomLeft.Rect().iBr ); + + aInnerRect = TRect( frameTopRight.Rect().iBr, + frameBottomLeft.Rect().iTl ); + } + else + { + TAknLayoutRect frameTopLeft; + frameTopLeft.LayoutRect( + aFrameRect, + AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g2().LayoutLine() ); + + TAknLayoutRect frameBottomRight; + frameBottomRight.LayoutRect( + aFrameRect, + AknLayoutScalable_Apps::bg_popup_call2_rect_pane_g5().LayoutLine() ); + + aOuterRect = TRect( frameTopLeft.Rect().iTl, + frameBottomRight.Rect().iBr ); + aInnerRect = TRect( frameTopLeft.Rect().iBr, + frameBottomRight.Rect().iTl ); + } + } } // ----------------------------------------------------------------------------- @@ -741,11 +753,28 @@ iNumberContents = EFalse; } - if( iObserver ) + if ( iPreviousNumberEntryContent.Compare( iEditor->Text() ) != 0 ) { - iObserver->NumberEntryStateChanged( iNumberContents ); + iPreviousNumberEntryContent.Zero(); + iEditor->GetText( iPreviousNumberEntryContent ); + + // The following stores the information of validity of the number for normal calls. + // This information is needed so that we don't show call items for invalid numbers. + TBool validPhoneNumber = Validate( iEditor->Text() ); + TInt commandId = validPhoneNumber ? EPhoneDialerValidNumber : EPhoneDialerInvalidNumber; + + TRAP_IGNORE( iAppUi->HandleCommandL( commandId ) ); + + if ( iEasyDialer && iOperationMode == EModeEasyDialing ) + { + TRAP_IGNORE( iEasyDialer->SetInputL( iEditor->Text() ) ); + } + + if ( iObserver ) + { + iObserver->NumberEntryStateChanged( iNumberContents ); + } } - } // ----------------------------------------------------------------------------- @@ -771,4 +800,54 @@ } } + +// CDialerNumberEntry::MakeVisible( TBool aVisible ) +// ----------------------------------------------------------------------------- +// +void CDialerNumberEntry::MakeVisible( TBool aVisible ) + { + CCoeControl::MakeVisible( aVisible ); + iEditor->MakeVisible( aVisible ); + } + + +// ----------------------------------------------------------------------------- +// CDialerNumberEntry::SetEasyDialingPlugin +// ----------------------------------------------------------------------------- +// +void CDialerNumberEntry::SetEasyDialingPlugin(CDialingExtensionInterface* aEasyDialer) + { + DIALER_PRINT("numberentry::SetEasyDialingPlugin"); + iEasyDialer = aEasyDialer; + } + +// ----------------------------------------------------------------------------- +// CDialerNumberEntry::SetOperationMode +// ----------------------------------------------------------------------------- +// +void CDialerNumberEntry::SetOperationMode( TDialerOperationMode aMode ) + { + iOperationMode = aMode; + } + +// ----------------------------------------------------------------------------- +// CDialerNumberEntry::Validate +// +// Copied from cphonekeys. +// ----------------------------------------------------------------------------- +// +TBool CDialerNumberEntry::Validate( const TDesC& aString ) + { + DIALER_PRINT("numberentry::Validate"); + TLex input( aString ); + TPtrC valid( KPhoneValidChars ); + + while ( valid.Locate( input.Peek() ) != KErrNotFound ) + { + input.Inc(); + } + + return !input.Remainder().Length(); + } + // End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/src/cdialerstub.cpp --- a/phoneuis/dialer/src/cdialerstub.cpp Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/dialer/src/cdialerstub.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007 - 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" @@ -30,11 +30,12 @@ // --------------------------------------------------------------------------- // EXPORT_C CDialer* CDialer::NewL( const CCoeControl& aContainer, - const TRect& aRect ) + const TRect& aRect, + MPhoneDialerController* aController ) { CDialer* self = new( ELeave )CDialer ( ); CleanupStack::PushL( self ); - self->ConstructL( aContainer , aRect ); + self->ConstructL( aContainer , aRect, aController ); CleanupStack::Pop(); // self return self; } @@ -53,12 +54,12 @@ // void CDialer::ConstructL( const CCoeControl& aContainer, - const TRect& aRect ) - { + const TRect& aRect, + MPhoneDialerController* /*aController*/ ) + { // set window SetContainerWindowL( aContainer ); SetParent( const_cast(&aContainer) ); - iParentControl = &aContainer; SetRect( aRect ); } @@ -90,6 +91,41 @@ // Empty } +// ----------------------------------------------------------------------------- +// CDialer::SetControllerL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CDialer::SetControllerL( MPhoneDialerController* /*aController*/ ) + { + // Empty + } + +// --------------------------------------------------------------------------- +// CDialer::Controller +// --------------------------------------------------------------------------- +// +EXPORT_C MPhoneDialerController* CDialer::Controller() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// CDialer::GetEasyDialingInterface +// ----------------------------------------------------------------------------- +// +EXPORT_C CDialingExtensionInterface* CDialer::GetEasyDialingInterface() const + { + return NULL; + } + +// --------------------------------------------------------------------------- +// CDialer::UpdateToolbar +// --------------------------------------------------------------------------- +// +EXPORT_C void CDialer::UpdateToolbar() + { + // empty + } // Methods from MNumberEntry @@ -226,6 +262,18 @@ { // Empty } + + +// --------------------------------------------------------------------------- +// CDialer::HandleControlEventL +// --------------------------------------------------------------------------- +// +void CDialer::HandleControlEventL( CCoeControl* /*aControl*/, TCoeEvent /*aEventType*/ ) + { + // Empty + } + + // Functions from CCoeControl // --------------------------------------------------------------------------- diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/src/cdialertoolbarcontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/src/cdialertoolbarcontainer.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,461 @@ +/* +* Copyright (c) 2009, 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: CDialerToolbarContainer replaces the standard S60 toolbar +* in the Dialer layout in the Easy dialing mode. It's +* responsible of the toolbar layout and logic, but not of the +* contents which are provided by an instance of +* MPhoneDialerController. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dialercommon.h" +#include "cdialertoolbarcontainer.h" + + +// CONSTANTS +const TInt KDialerToolbarButtonKeyRepeatDelay = 300; +const TInt KDialerToolbarKeyRepeatInterval = 75; + + + +// CLASS DEFINITION + +// --------------------------------------------------------------------------- +// NewL +// +// --------------------------------------------------------------------------- +// +CDialerToolbarContainer* CDialerToolbarContainer::NewL( CCoeControl& aParent, + MPhoneDialerController* aContentProvider ) + { + CDialerToolbarContainer* self = + new (ELeave) CDialerToolbarContainer( aParent, aContentProvider ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CDialerToolbarContainer +// +// --------------------------------------------------------------------------- +// +CDialerToolbarContainer::CDialerToolbarContainer( CCoeControl& aParent, + MPhoneDialerController* aContentProvider ) : + CDialerContainerBase( aParent ), + iContentProvider( aContentProvider ) + { + } + +// --------------------------------------------------------------------------- +// ~CDialerToolbarContainer +// +// --------------------------------------------------------------------------- +// +CDialerToolbarContainer::~CDialerToolbarContainer() + { + iCoeEnv->RemoveForegroundObserver( *this ); + DeleteButtons(); + } + +// --------------------------------------------------------------------------- +// ConstructL +// +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::ConstructL() + { + BaseConstructL(); + + CreateButtonsL(); + + iCoeEnv->AddForegroundObserverL( *this ); + } + +// --------------------------------------------------------------------------- +// SetContentProviderL +// +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::SetContentProviderL( MPhoneDialerController* aProvider ) + { + if ( iContentProvider != aProvider ) + { + iContentProvider = aProvider; + + // Recreate buttons to reset available button states + DeleteButtons(); + CreateButtonsL(); + } + } + +// --------------------------------------------------------------------------- +// UpdateButtonStates +// +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::UpdateButtonStates() + { + // safety check + if ( iButtons.Count() < MPhoneDialerController::ENumberOfButtons || + !iContentProvider ) + { + return; + } + + for ( TInt i = 0 ; i < MPhoneDialerController::ENumberOfButtons ; ++i ) + { + MPhoneDialerController::TButtonIndex idx = + static_cast< MPhoneDialerController::TButtonIndex >( i ); + TInt state = iContentProvider->ButtonState( idx ); + TBool dimmed = iContentProvider->ButtonDimmed( idx ); + if ( state >= 0 ) + { + iButtons[i]->SetCurrentState( state, EFalse ); + } + iButtons[i]->SetDimmed( dimmed ); + } + } + +// --------------------------------------------------------------------------- +// SetVariety +// +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::SetVariety() + { + iVariety = ( Layout_Meta_Data::IsLandscapeOrientation() ? + EDialerVarietyLandscape : EDialerVarietyPortrait ); + } + +// --------------------------------------------------------------------------- +// SetLayout +// +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::SetLayout() + { + if ( iButtons.Count() < MPhoneDialerController::ENumberOfButtons ) + { + return; + } + + // Position for the first button + TPoint buttonPos = Rect().iTl; + + if ( iVariety == EDialerVarietyPortrait ) + { + // In portrait, buttons are laid out from top to bottom + for ( TInt i = 0 ; i < iButtons.Count() ; ++i ) + { + buttonPos = LayoutButton( i, buttonPos ); + } + } + else + { + // In landscape, buttons are laid out from right to left. + // This is achieved by looping button array backwards and laying + // those out from left to right. + for ( TInt i = iButtons.Count()-1 ; i >= 0 ; --i ) + { + buttonPos = LayoutButton( i, buttonPos ); + } + } + } + +// --------------------------------------------------------------------------- +// CountComponentControls +// +// --------------------------------------------------------------------------- +// +TInt CDialerToolbarContainer::CountComponentControls() const + { + return iButtons.Count(); + } + +// --------------------------------------------------------------------------- +// ComponentControl +// +// --------------------------------------------------------------------------- +// +CCoeControl* CDialerToolbarContainer::ComponentControl( TInt aIndex ) const + { + CCoeControl* control = NULL; + if ( aIndex >= 0 && aIndex < iButtons.Count() ) + { + control = iButtons[ aIndex ]; + } + return control; + } + +// --------------------------------------------------------------------------- +// HandleControlEventL +// +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ) + { + if ( aEventType == MCoeControlObserver::EEventStateChanged ) + { + // Handle button press. + + // Multistate buttons change state automatically when pressed. + // Revert this change as we do not want to use states + // for "toggle button" type of functionality but to give one button + // different functions depending on the situation. + UpdateButtonStates(); + + // Handle the command attached to the button + CAknButton* button = static_cast( aControl ); + TInt commandId = ButtonCommand( *button ); + + if ( commandId == EPhoneDialerCmdClear ) + { + // simulate backspace + TKeyEvent keyEvent; + keyEvent.iModifiers = 0; + keyEvent.iRepeats = 0; + keyEvent.iCode = EKeyBackspace; + keyEvent.iScanCode = EStdKeyBackspace; + iCoeEnv->SimulateKeyEventL( keyEvent, EEventKey ); + } + else + { + // Forward pressed toolbar button to the framework + // so that we can handle it in active state + CAknAppUi* appUi = static_cast( iCoeEnv->AppUi() ); + appUi->ProcessCommandL( commandId ); + } + } + } + +// --------------------------------------------------------------------------- +// HandlePointerEventL +// +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent ) + { + iLatestPointerEvent = aPointerEvent; + CCoeControl::HandlePointerEventL( aPointerEvent ); + } + +// --------------------------------------------------------------------------- +// HandleGainingForeground +// +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::HandleGainingForeground() + { + // no implementation needed + } + +// --------------------------------------------------------------------------- +// HandleLosingForeground +// +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::HandleLosingForeground() + { + // This is needed when dialer control disappeares during keypress. + // Last pressed pointer event must be forwarted to framework + // as pointer up event. Thus button is set to unpressed state etc. + // + if ( iLatestPointerEvent.iType != TPointerEvent::EButton1Up ) + { + iLatestPointerEvent.iType = TPointerEvent::EButton1Up; + TRAP_IGNORE( HandlePointerEventL( iLatestPointerEvent ) ); + } + } + +// --------------------------------------------------------------------------- +// CreateButtonsL +// +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::CreateButtonsL() + { + // Create the avkon button objects + for ( TInt i = 0 ; i < MPhoneDialerController::ENumberOfButtons ; ++i ) + { + CAknButton* button = CAknButton::NewLC(); + button->SetContainerWindowL( *this ); // this sets also parent and mopParent + button->SetObserver( this ); + button->SetIconScaleMode( EAspectRatioPreserved ); + AknsUtils::RegisterControlPosition( button ); + button->ActivateL(); + iButtons.AppendL( button ); + CleanupStack::Pop( button ); + iButtonCommands.AppendL( RArray() ); + } + + // Backspace button has auto-repeat feature + iButtons[MPhoneDialerController::EClearButton]->SetButtonFlags( KAknButtonKeyRepeat ); + iButtons[MPhoneDialerController::EClearButton]->SetKeyRepeatInterval( + KDialerToolbarButtonKeyRepeatDelay, KDialerToolbarKeyRepeatInterval ); + + // Call button doesn't use default button background but a green one + // (same as used by in-call view for answer button) + iButtons[MPhoneDialerController::ECallButton]->SetFrameAndCenterIds( + KAknsIIDQsnFrButtonNormalAnswer, KAknsIIDQsnFrButtonNormalAnswerCenter, + KAknsIIDQsnFrButtonPressedAnswer, KAknsIIDQsnFrButtonPressedAnswerCenter, + KAknsIIDQsnFrButtonInactiveAnswer, KAknsIIDQsnFrButtonInactiveAnswerCenter, + KAknsIIDQsnFrButtonPressedAnswer, KAknsIIDQsnFrButtonPressedAnswerCenter, + KAknsIIDQsnFrButtonInactiveAnswer, KAknsIIDQsnFrButtonInactiveAnswerCenter + ); + + // Add button states + if ( iContentProvider ) + { + for ( TInt i = 0 ; i < MPhoneDialerController::ENumberOfButtons ; ++i ) + { + MPhoneDialerController::TButtonIndex btnIdx = + static_cast< MPhoneDialerController::TButtonIndex >( i ); + RPointerArray< MPhoneDialerController::CButtonData > states; + CleanupClosePushL( states ); + iContentProvider->GetButtonData( btnIdx, states ); + for ( TInt j = 0 ; j < states.Count() ; ++j ) + { + TRAP_IGNORE( AddButtonStateL( i, *states[j] ) ); + delete states[j]; + states[j] = NULL; + } + CleanupStack::PopAndDestroy( &states ); + } + } + } + +// --------------------------------------------------------------------------- +// DeleteButtons +// Reset internal arrays holding the button data +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::DeleteButtons() + { + for ( TInt i = 0 ; i < iButtons.Count() ; ++i ) + { + AknsUtils::DeregisterControlPosition( iButtons[i] ); + } + iButtons.ResetAndDestroy(); + + for ( TInt i = 0 ; i < iButtonCommands.Count() ; ++i ) + { + iButtonCommands[i].Reset(); + } + iButtonCommands.Reset(); + } + +// --------------------------------------------------------------------------- +// AddButtonStateL +// +// --------------------------------------------------------------------------- +// +void CDialerToolbarContainer::AddButtonStateL( TInt aButtonIndex, + MPhoneDialerController::CButtonData& aButtonData ) + { + iButtons[ aButtonIndex ]->AddStateL( + aButtonData.iIcon, //CGulIcon* aIcon, + NULL, //CGulIcon* aDimmedIcon, + NULL, //CGulIcon* aPressedIcon, + NULL, //CGulIcon* aHoverIcon, + KNullDesC, //const TDesC& aText, + *aButtonData.iTooltip, //const TDesC& aHelpText, + 0 ); //const TInt aStateFlags + aButtonData.iIcon = NULL; // ownership transferred + iButtonCommands[ aButtonIndex ].AppendL( aButtonData.iCommandId ); + } + +// --------------------------------------------------------------------------- +// ButtonCommand +// +// --------------------------------------------------------------------------- +// +TInt CDialerToolbarContainer::ButtonCommand( const CAknButton& aButton ) const + { + TInt commandId = KErrNotFound; + + // Find out index of the button in iButtons array + TInt btnIndex = KErrNotFound; + for ( TInt i = 0 ; i < iButtons.Count() ; ++i ) + { + if ( iButtons[i] == &aButton ) + { + btnIndex = i; + i = iButtons.Count(); // to break out of the loop + } + } + __ASSERT_DEBUG( btnIndex >= 0, DialerPanic( EDialerPanicToolbarButtonNotFound ) ); + + // Find the corresponding command from command array + TInt btnStateIdx = aButton.StateIndex(); + if ( btnIndex < iButtonCommands.Count() && + btnStateIdx < iButtonCommands[btnIndex].Count() ) + { + commandId = iButtonCommands[btnIndex][btnStateIdx]; + } + + __ASSERT_DEBUG( commandId != KErrNotFound, DialerPanic( EDialerPanicToolbarButtonNotFound ) ); + return commandId; + } + +// --------------------------------------------------------------------------- +// LayoutButton +// Set layout for one button. +// --------------------------------------------------------------------------- +// +TPoint CDialerToolbarContainer::LayoutButton( TInt aButtonIdx, TPoint aPos ) + { + TRect parentRect = Rect(); + + TAknWindowComponentLayout buttonLayout = + ( aButtonIdx == MPhoneDialerController::ECallButton ? + AknLayoutScalable_Apps::cell_dia3_key1_fun_pane( iVariety ) : + AknLayoutScalable_Apps::cell_dia3_key0_fun_pane( iVariety ) ); + + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( parentRect, buttonLayout ); + TRect outerRect = layoutRect.Rect(); + outerRect.SetRect( aPos, outerRect.Size() ); + + TRect innerRect = outerRect; + innerRect.Shrink( 1, 1 ); + iButtons[ aButtonIdx ]->SetRect( innerRect ); + AknsUtils::RegisterControlPosition( iButtons[ aButtonIdx ] ); + + // Calculate position for the next button + TPoint nextPos = aPos; + if ( iVariety == EDialerVarietyPortrait ) + { + nextPos.iY += outerRect.Height(); + } + else + { + nextPos.iX += outerRect.Width(); + } + + return nextPos; + } + +// end of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/dialer/src/cdialingextensionobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/src/cdialingextensionobserver.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,180 @@ +/* +* Copyright (c) 2007 - 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: Observer for dialingextension plug-in. +* +*/ + +// INCLUDE FILES +#include +#include +#include + +// USER INCLUDE FILES +#include "cdialingextensionobserver.h" +#include "cdialernumberentry.h" +#include "cdialer.h" + + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::CDialingExtensionObserver +// +// +// --------------------------------------------------------------------------- +// +CDialingExtensionObserver* CDialingExtensionObserver::NewL( + CDialingExtensionInterface* aDialingExtension, + CDialerNumberEntry* aNumberEntry, + CDialer* aDialer ) + { + CDialingExtensionObserver* self = new (ELeave) CDialingExtensionObserver( + aDialingExtension, aNumberEntry, aDialer ); + return self; + } + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::~CDialingExtensionObserver +// +// +// --------------------------------------------------------------------------- +// +CDialingExtensionObserver::~CDialingExtensionObserver() + { + // no owned data => no implementation needed + } + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::HandleDialingExtensionEvent +// +// +// --------------------------------------------------------------------------- +// +void CDialingExtensionObserver::HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent ) + { + switch ( aEvent ) + { + case MDialingExtensionObserver::EFocusChanged: + { + // The basic idea of EFocusChanged event handling: + // - If dialing extension gets in focus, focus is taken from number entry editor. + // - If dialing extension gives up focus, focus is given to number entry editor. + + if ( iDialingExtension->IsFocused() && iNumberEntry->IsFocused() ) + { + iNumberEntry->SetFocus(EFalse); + UpdateCba(); + iDialer->UpdateToolbar(); + } + else if ( !iDialingExtension->IsFocused() && !iNumberEntry->IsFocused() && iDialer->IsFocused() ) + { + // Number entry editor is set focused only if the parent control is in focus. + // If number entry editor was focused but parent was not, this may show as a + // a blinking cursor in an inappropriate place. + iNumberEntry->SetFocus(ETrue); + UpdateCba(); + iDialer->UpdateToolbar(); + } + + iNumberEntry->DrawDeferred(); + } + break; + + case MDialingExtensionObserver::ECCALauncherExit: + case MDialingExtensionObserver::ECommunicationCancelled: + case MDialingExtensionObserver::ECommunicationStarted: + { + // No actions. We should stay in dialer, and not go to idle. + } + break; + + case MDialingExtensionObserver::EEasyDialingEnabled: + { + // order dialer to refresh its layout + iDialer->SetSize( iDialer->Size() ); + if (iDialingExtension && iNumberEntry) + { + // get matches for the current input + TRAP_IGNORE( SearchL() ); + } + iDialer->DrawDeferred(); + } + break; + + case MDialingExtensionObserver::EEasyDialingDisabled: + { + // order parent to refresh its layout + iDialer->SetSize( iDialer->Size() ); + iDialer->DrawDeferred(); + } + break; + + default: + break; + } + } + + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::CDialingExtensionObserver +// +// +// --------------------------------------------------------------------------- +// +CDialingExtensionObserver::CDialingExtensionObserver( + CDialingExtensionInterface* aDialingExtension, + CDialerNumberEntry* aNumberEntry, + CDialer* aDialer ) : +iDialingExtension( aDialingExtension ), +iNumberEntry( aNumberEntry ), +iDialer( aDialer ), +iEikonEnvironment( NULL ) + { + } + + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::CDialingExtensionObserver +// +// +// --------------------------------------------------------------------------- +// +void CDialingExtensionObserver::UpdateCba() + { + if ( !iEikonEnvironment ) + { + iEikonEnvironment = CEikonEnv::Static(); + } + + if( iEikonEnvironment && iEikonEnvironment->EikAppUi() ) + { + TRAP_IGNORE( iEikonEnvironment->EikAppUi()->HandleCommandL( EPhoneCmdUpdateCba )); + } + } + + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::SearchL +// +// +// --------------------------------------------------------------------------- +// +void CDialingExtensionObserver::SearchL() + { + TPtrC searchString = iNumberEntry->Text(); + if ( searchString.Length() ) + { + iDialingExtension->SetInputL( searchString ); + } + } + +// end of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/cenrep/200212A0.txt Binary file phoneuis/easydialing/cenrep/200212A0.txt has changed diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/conf/easydialing.confml Binary file phoneuis/easydialing/conf/easydialing.confml has changed diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/conf/easydialing_200212A0.crml Binary file phoneuis/easydialing/conf/easydialing_200212A0.crml has changed diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/data/200212A0.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/data/200212A0.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,51 @@ +/* +* 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: Easy dialing ECom registry info. +* +*/ + +// INCLUDES + +#include +#include "ExtrStandbyScrConst.h" +#include "easydialingconstants.hrh" + +RESOURCE REGISTRY_INFO theInfo + { + resource_format_version = RESOURCE_FORMAT_VERSION_2; + + dll_uid = EASYDIALING_PLUGIN_DLL_UID; + + interfaces = + { + INTERFACE_INFO + { + interface_uid = EASYDIALING_PLUGIN_IF_UID; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = EASYDIALING_PLUGIN_ECOM_IMPL_UID; + version_no = 1; + display_name = "Easy dialing"; + default_data = ""; + opaque_data = ""; + rom_only = 0; + } + }; + } + }; + } + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/data/easydialing_stub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/data/easydialing_stub.pkg Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,23 @@ +; easydialing_stub.pkg +; +;Language - standard language definitions +&EN + +; standard SIS file header +#{"Easy dialing plug-in"},(0x200212A0),1,0,0, TYPE=SA + +;Localised Vendor name +%{"Nokia"} + +;Unique Vendor name +:"Nokia" + +""-"z:\sys\bin\easydialingplugin.dll" +""-"z:\resource\plugins\easydialingplugin.r*" +""-"z:\resource\easydialingpluginresources.r*" +""-"z:\resource\apps\easydialing.mif" + +""-"z:\sys\bin\edcontactor.dll" +""-"z:\resource\edcontactor.r*" + +""-"z:\system\data\10202BE9\200212A0.txt" \ No newline at end of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/data/easydialing_stub.sis Binary file phoneuis/easydialing/data/easydialing_stub.sis has changed diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/data/easydialingpluginresources.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/data/easydialingpluginresources.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,213 @@ +/* +* 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: Easy dialing resources. +* +*/ + +// RESOURCE IDENTIFIER + +NAME EDPL + + +// INCLUDES + +#include +#include + +#include +#include +#include +#include "easydialing.loc" + +#include +#include "easydialingcommands.hrh" + + +// CONSTANTS + +// MACROS + +// RESOURCE DEFINITIONS + +// --------------------------------------------------------- +// +// Define the resource file signature +// This resource should be empty. +// +// --------------------------------------------------------- +// + +RESOURCE RSS_SIGNATURE { } + +// --------------------------------------------------------- +// +// r_easydialing_cba +// Contains softkey definitions for easy dialing. +// +// --------------------------------------------------------- +// +RESOURCE CBA r_easydialing_cba + { + buttons = + { + CBA_BUTTON + { + id = EPhoneCmdOptions; + txt = text_softkey_option; + }, + CBA_BUTTON + { + id = EPhoneCmdBack; + txt = text_softkey_exit; + }, + CBA_BUTTON + { + id = EAknSoftkeyOpen; + txt = text_softkey_open; + } + }; + } + + +// ----------------------------------------------------------------------------- +// +// r_easydialing_menubar +// Menubar for easy dialing when action menu is closed. +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_BAR r_easydialing_menubar + { + titles = + { + MENU_TITLE { menu_pane = r_easydialing_menu; } + }; + } + + +// ----------------------------------------------------------------------------- +// +// r_easydialing_menu +// Menu pane +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_easydialing_menu + { + items = + { + MENU_ITEM + { + command = EEasyDialingOpenContact; + txt = qtn_options_open; + }, + MENU_ITEM + { + command = EEasyDialingVoiceCall; + cascade = r_easydialing_options_call_menu; + txt = text_number_call; + }, + MENU_ITEM + { + command = EEasyDialingSendMessage; + txt = qtn_nren_send_message; + }, + MENU_ITEM + { + txt = qtn_easydial_option_submenu_title; + cascade = r_easydialing_options_on_off_cascade_menu; + }, + MENU_ITEM + { + command = EPhoneDialerCmdHelp; + txt = qtn_options_help; + }, + MENU_ITEM + { + command = EPhoneCmdBack; + txt = qtn_options_exit; + } + }; + } + + +// --------------------------------------------------------- +// +// r_easydialing_options_call_menu +// Number Acquisition view options call menu pane. +// +// --------------------------------------------------------- +// +RESOURCE MENU_PANE r_easydialing_options_call_menu + { + items= + { + MENU_ITEM + { + command = EEasyDialingVoiceCall; + txt = qtn_call_sub_voice; + }, + MENU_ITEM + { + command = EEasyDialingVideoCall; + txt = qtn_call_sub_video; + } + }; + } + +//---------------------------------------------------------------------------- +// r_easydialing_options_on_off_menu_item +// +// Menu item for setting Easy dialing on/off. +// --------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_easydialing_options_on_off_menu_item + { + items = + { + MENU_ITEM + { + txt = qtn_easydial_option_submenu_title; + cascade = r_easydialing_options_on_off_cascade_menu; + } + }; + } + +//---------------------------------------------------------------------------- +// r_easydialing_options_on_off_cascade_menu +// +// Submenu for setting Easy dialing on/off. +// --------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_easydialing_options_on_off_cascade_menu + { + items = + { + MENU_ITEM + { + command = EEasyDialingOn; + txt = qtn_easy_dialing_on; + flags = EEikMenuItemRadioStart; + }, + MENU_ITEM + { + command = EEasyDialingOff; + txt = qtn_easy_dialing_off; + flags = EEikMenuItemRadioEnd; + } + }; + } + + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/bwins/edcontactoru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/bwins/edcontactoru.def Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,6 @@ +EXPORTS + ?ExecuteServiceL@CEDContactorService@@QAEXABVTCSParameter@1@@Z @ 1 NONAME ; void CEDContactorService::ExecuteServiceL(class CEDContactorService::TCSParameter const &) + ?IsBusy@CEDContactorService@@QBEHXZ @ 2 NONAME ; int CEDContactorService::IsBusy(void) const + ?NewL@CEDContactorService@@SAPAV1@PAVMEDContactorObserver@@@Z @ 3 NONAME ; class CEDContactorService * CEDContactorService::NewL(class MEDContactorObserver *) + ?CancelService@CEDContactorService@@QAEXXZ @ 4 NONAME ; void CEDContactorService::CancelService(void) + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/data/edcontactor.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/data/edcontactor.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,60 @@ +/* +* 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: Resource file for CCA Contactor Service +* +*/ + + +// RESOURCE IDENTIFIER +NAME EDCO // 4 letter ID + +// INCLUDES +#include +#include +#include +#include + + +#include +#include + +// RESOURCE DEFINITIONS + +// --------------------------------------------------------------------------- +// RSS_SIGNATURE +// --------------------------------------------------------------------------- +// +RESOURCE RSS_SIGNATURE {} + +// -------------------------------------------------------------------------- +// AIW_INTEREST +// Contact selection interest. +// -------------------------------------------------------------------------- +// +RESOURCE AIW_INTEREST r_edcontactorservice_contact_selection_interest + { + items= + { + AIW_CRITERIA_ITEM + { + id = KAiwCmdSelect; // serviceCmd used here also as ID + serviceCmd = KAiwCmdSelect; + contentType = EGenericParamContactLinkArrayStr; + serviceClass = KAiwClassBase; + maxProviders = 1; + } + }; + } + +//End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/eabi/edcontactoru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/eabi/edcontactoru.def Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,6 @@ +EXPORTS + _ZN19CEDContactorService15ExecuteServiceLERKNS_12TCSParameterE @ 1 NONAME + _ZN19CEDContactorService4NewLEP20MEDContactorObserver @ 2 NONAME + _ZNK19CEDContactorService6IsBusyEv @ 3 NONAME + _ZN19CEDContactorService13CancelServiceEv @ 4 NONAME + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/group/bld.inf Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,24 @@ +/* +* 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: Easy dialing contactor module bld.inf. +* +*/ + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_MMPFILES +edcontactor.mmp diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/group/edcontactor.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/group/edcontactor.mmp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,76 @@ +/* +* 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: Easy dialing contactor module project file. +* +*/ + +#include +#include + + +TARGET edcontactor.dll +TARGETTYPE dll +UID 0x1000008d 0x200212A3 +VENDORID VID_DEFAULT +CAPABILITY CAP_CLIENT_DLL NetworkServices NetworkControl + +USERINCLUDE ../inc +USERINCLUDE ../../inc + +SOURCEPATH ../src +SOURCE edcontactorservice.cpp +SOURCE edcontactorserviceoperator.cpp +SOURCE edcontactorpopuphandler.cpp + +SOURCE edcontactor.cpp +SOURCE edcontactoroperation.cpp +SOURCE edcontactorcalloperation.cpp +SOURCE edcontactorunieditoroperation.cpp +SOURCE edcontactoremailoperation.cpp +SOURCE edcontactorimoperation.cpp +SOURCE edcontactorvoipoperation.cpp +SOURCE edphonecall.cpp +SOURCE edcontactorvideocalloperation.cpp +SOURCE edmsgeditors.cpp + +// resources +START RESOURCE ../data/edcontactor.rss +HEADER +TARGETPATH RESOURCE_FILES_DIR +LANGUAGE_IDS +END + + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/ecom + +LIBRARY cone.lib +LIBRARY ws32.lib +LIBRARY euser.lib +LIBRARY efsrv.lib +LIBRARY bafl.lib +LIBRARY aiwdialdata.lib //AIW +LIBRARY commonengine.lib +LIBRARY servicehandler.lib //AIW +LIBRARY sendui.lib +LIBRARY ecom.lib +LIBRARY serviceprovidersettings.lib +LIBRARY apgrfx.lib +LIBRARY avkon.lib +LIBRARY eikcore.lib +DEBUGLIBRARY flogger.lib + + + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactor.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,55 @@ +/* +* 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: Class for launching the different communication methods +* +*/ + + +#ifndef EDCONTACTORSERVICE_H +#define EDCONTACTORSERVICE_H + +// INCLUDES +#include +#include +// CLASS DECLARATION + +/** + * Class for launching communication methods + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib + * @since S60 v5.0 + */ +NONSHARABLE_CLASS(CEDContactor) : CBase + { +public: + /** + * Starts a communication method. + * + * @param aCommMethod The communication method. + * @param aParam Parameter for the communication, for example phone number or e-mail address. + * @param aName Name of the contact which the parameter is from, for example for the sms/mms editor's to-field (optional) + * @param aForcedService Should the service be forced or not, relevant in voice call set-up. + * @param aServiceID The service ID for the VoIP call comm method, has no effect and can be left out for other comm methods + */ + static void ExecuteServiceL(VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aCommMethod, const TDesC& aParam, + const TDesC& aName = KNullDesC, TBool aForcedService = EFalse, TUint32 aServiceId = 0); + + }; + +#endif // EDCONTACTORSERVICE_H +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactorcalloperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactorcalloperation.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,92 @@ +/* +* 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: Class implementing the call operation +* +*/ + + +#ifndef EDCONTACTORCALLOPERATION_H +#define EDCONTACTORCALLOPERATION_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION +class CEDContactorOperation; + +/** + * Class implementing the call operation + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib + * @since S60 v5.0 + */ +NONSHARABLE_CLASS(CEDContactorCallOperation) : public CEDContactorOperation + { +public: + // Constructors and destructor + + /** + * Destructor. + */ + ~CEDContactorCallOperation(); + + /** + * Two-phased constructor. + * + * @param aParam The phone number to call. + * @param aForcedCallType Should (voice) call be initiated as forced cs call or not. + */ + static CEDContactorCallOperation* NewL(const TDesC& aParam, TBool aForcedCallType); + + /** + * Two-phased constructor. + * + * @param aParam The phone number to call. + * @param aForcedCallType Should (voice) call be initiated as forced cs call or not. + */ + static CEDContactorCallOperation* NewLC(const TDesC& aParam, TBool aForcedCallType); + + /** + * Executes the operation (makes the call) + */ + virtual void ExecuteLD(); + +private: + + /** + * Constructor for performing 1st stage construction + * + * @param aParam The phone number to call. + * @param aForcedCallType Should (voice) call be initiated as forced cs call or not. + */ + CEDContactorCallOperation(const TDesC& aParam, TBool aForcedCallType); + + /** + * EPOC default constructor for performing 2nd stage construction + */ + void ConstructL(); + +private: + + /** Perform voice call as forced cs call or not.*/ + TBool iForcedCallType; + }; + +#endif // EDCONTACTORCALLOPERATION_H +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactoremailoperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactoremailoperation.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,88 @@ +/* +* 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: Class implementing the email operation +* +*/ + + +#ifndef EDCONTACTOREMAILOPERATION_H +#define EDCONTACTOREMAILOPERATION_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION +class CEDContactorOperation; + +/** + * Class implementing the email operation + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib + * @since S60 v5.0 + */ +NONSHARABLE_CLASS(CEDContactorEmailOperation) : public CEDContactorOperation + { +public: + // Constructors and destructor + + /** + * Destructor. + */ + ~CEDContactorEmailOperation(); + + /** + * Two-phased constructor. + * + * @param aParam The address to send email to. + * @param aName The name of the contact, to be shown in the "to" field + */ + static CEDContactorEmailOperation* NewL(const TDesC& aParam, const TDesC& aName); + + /** + * Two-phased constructor. + * + * @param aParam The address to send email to. + * @param aName The name of the contact, to be shown in the "to" field + */ + static CEDContactorEmailOperation* NewLC(const TDesC& aParam, const TDesC& aName); + + /** + * Executes the operation (starts the email editor) + */ + virtual void ExecuteLD(); + +private: + + /** + * Constructor for performing 1st stage construction + * + * @param aParam The address to send email to. + * @param aName The name of the contact, to be shown in the "to" field + */ + CEDContactorEmailOperation(const TDesC& aParam, const TDesC& aName); + + /** + * EPOC default constructor for performing 2nd stage construction + */ + void ConstructL(); + + }; + +#endif // EDCONTACTOREMAILOPERATION_H +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactorheaders.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactorheaders.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,75 @@ +/* +* 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: ccacontactor's headers +* +*/ + + +#ifndef __EDCONTACTORHEADERS_H__ +#define __EDCONTACTORHEADERS_H__ + + +// Constants +#include +_LIT( KColon, ":" ); + +// system +#include +#include +#include +#include +#include +#include +#include + +//Phbk +#include + +// AIW +#include +#include +#include +#include +#include +#include +#include + + +//SPSettings +#include +#include + +//Sendui +#include +#include +#include +#include +#include + +//IM plugin +#include + +//own +#include "edcontactor.h" +#include "edcontactoroperation.h" +#include "edcontactorcalloperation.h" +#include "edcontactorvideocalloperation.h" +#include "edcontactorunieditoroperation.h" +#include "edcontactoremailoperation.h" +#include "edcontactorvoipoperation.h" +#include "edcontactorimoperation.h" +#include "edmsgeditors.h" +#include "edphonecall.h" + +#endif // __EDCONTACTORHEADERS_H__ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactorimoperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactorimoperation.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,138 @@ +/* +* 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: Class implementing the instant messaging operation +* +*/ + + +#ifndef EDCONTACTORIMOPERATION_H +#define EDCONTACTORIMOPERATION_H + +// INCLUDES +#include +#include + + +// CLASS DECLARATION +class CCmsContactorImPluginBase; +class CSPSettings; +class CEDContactorOperation; + +/** + * Class implementing the instant messaging operation + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib + * @since S60 v5.0 + */ +NONSHARABLE_CLASS(CEDContactorIMOperation) : public CEDContactorOperation + { +public: + // Constructors and destructor + + /** + * Destructor. + */ + ~CEDContactorIMOperation(); + + /** + * Two-phased constructor. + * + * @param aParam The IM "address" to send the message to + */ + static CEDContactorIMOperation* NewL(const TDesC& aParam); + + /** + * Two-phased constructor. + * + * @param aParam The IM "address" to send the message to + */ + static CEDContactorIMOperation* NewLC(const TDesC& aParam); + + /** + * Executes the operation (opens the message editor) + */ + virtual void ExecuteLD(); + +private: + + /** + * Constructor for performing 1st stage construction + * + * @param aParam The IM "address" to send the message to + */ + CEDContactorIMOperation(const TDesC& aParam); + + /** + * EPOC default constructor for performing 2nd stage construction + */ + void ConstructL(); + +private: + /** + * Resolve IM Launcher ECom UID + * + * @since S60 v5.0 + * @param aServiceId service id + * @return ECom UID + */ + TUid ResolveEcomUidL( const TDesC& aServiceId ); + + /** + * Resolve IM Launcher ECom UID + * + * @since S60 v5.0 + * @param aServiceId service id + * @return Ecom UId in interegr + */ + TInt DoResolveEcomUidL( const TDesC& aServiceId ); + + /** + * Load the ECom plugin + * + * @since S60 v5.0 + * @param aUidImp implementation UID + * @param aXspId service provider id + */ + void LoadEcomL( TUid aUidImp, const TDesC& aXspId ); + + /** + * Extracts service part from XspId + * + * @since S60 v5.0 + * @param aXspId service provider id + * @return service part (uri scheme part) + */ + TPtrC ExtractService( const TDesC& aXspId ); +private: + + /** + * Im Plugin. + * OWN + */ + CCmsContactorImPluginBase* iPlugin; + + /** + * Service Provider Settings + * OWN + */ + CSPSettings* iSPSettings; + + }; + +#endif // EDCONTACTORIMOPERATION_H +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactoroperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactoroperation.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,65 @@ +/* +* 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: Base class for communication method launching operations +* +*/ + + +#ifndef EDCONTACTOROPERATION_H +#define EDCONTACTOROPERATION_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION + +/** + * Base class for communication method launching operations + */ +NONSHARABLE_CLASS(CEDContactorOperation) : public CBase + { +public: + // Constructors and destructor + + /** + * Destructor. + */ + virtual ~CEDContactorOperation(); + + /** + * Executes the operation + */ + virtual void ExecuteLD()=0; + +protected: + + /** + * Constructor for performing 1st stage construction + * + * @param aParam Communication parameter, for example phone number or e-mail address + * @param aName Name of the contact to which the communication is started (optional) + */ + CEDContactorOperation(const TDesC& aParam, const TDesC& aName = KNullDesC); + +protected: + + const TDesC& iParam; + + const TDesC& iName; + + }; + +#endif // EDCONTACTOROPERATION_H +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactorpopuphandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactorpopuphandler.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,137 @@ +/* +* 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: Class for handling popup query. +* +*/ + + +#ifndef EDCONTACTORPOPUPHANDLER_H +#define EDCONTACTORPOPUPHANDLER_H + +#include + +//FORWARD DECLERATIONS +class CAiwServiceHandler; +class CCoeEnv; + +/** + * CEDContactorPopupHandler + * Handling launch of popup query. + * + * @code + * + * @endcode + * + * @lib ccacontactorservice + * @since S60 v5.0 + */ +NONSHARABLE_CLASS(CEDContactorPopupHandler) : + public CBase, + public MAiwNotifyCallback + { + +public: + + /** + * Two-phased constructor. + */ + static CEDContactorPopupHandler* NewL(); + + /** + * Destructor. + */ + virtual ~CEDContactorPopupHandler(); + + /** + * Launch popup. + * + * Leaves KErrNotFound if field data not found, + * KErrCancel if popup canceled + * KErrAbort if red key pressed + * KErrGeneral if error occurred + * + * @since S60 5.0 + * @param aCommAddressSelectType: Select Type. + * @param aUseDefaults: Is default functionality enabled. + */ + TDesC& LaunchPopupL( + const TDesC8& aContactLinkArray, + TAiwCommAddressSelectType aCommAddressSelectType, + TBool aUseDefaults); + + void ClosePopupL(); + +private: + + // from base class MAiwNotifyCallback + TInt HandleNotifyL(TInt aCmdId, TInt aEventId, + CAiwGenericParamList& aEventParamList, + const CAiwGenericParamList& aInParamList); + +private: + /** + * Constructor. + */ + CEDContactorPopupHandler(); + void ConstructL(); + +private: //new methods + void PrepareResourcesL(); + void ReadFieldDataL(CAiwGenericParamList& aEventParamList); + void AsyncStop(); + +private: + // data + + /** + * Pointer to AIW service handler + * Own. + */ + CAiwServiceHandler* iServiceHandler; + + /** + * Pointer to scheduler wait. + * Own. + */ + CActiveSchedulerWait* iSchedulerWait; + + /** + * Environment. + * Not Own. + */ + CCoeEnv& iCoeEnv; + + /** + * Offset of loaded resource file. + * Own. + */ + TInt iResourceOffset; + + /** + * Result string from the AIW service. + * Own. + */ + HBufC* iQueryResults; + + /** + * For error handling. + * Own. + */ + TInt iError; + + }; + +#endif // EDCONTACTORPOPUPHANDLER_H + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactorservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactorservice.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,189 @@ +/* +* 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: This is a class for starting services +* +*/ + +#ifndef __EDCONTACTORSERVICE_H__ +#define __EDCONTACTORSERVICE_H__ + +// INCLUDES +#include +#include +#include + +//FORWARD DECLARATIONS + +class CEDContactorServiceOperator; +class MEDContactorObserver; + + +/** + * CEDContactorService + * + * Class for starting services of CCA contactor service. + * @code + * HBufC* fullName = GetFullNameLC(); + * CVPbkContactLinkArray* linkArray = CVPbkContactLinkArray::NewLC(); + * linkArray->AppendL(iContactLink); + * HBufC8* streamedArray = linkArray->PackLC(); + * + * //Set control flags. + * TUint flags; + * flags |= CEDContactorService::TCSParameter::EEnableDefaults; + * + * CEDContactorService::TCSParameter params(VPbkFieldTypeSelectorFactory::EVoiceCallSelector, *streamedArray, flags, *fullName); + * CEDContactorService::ExecuteServiceL(params); + * + * CleanupStack::PopAndDestroy(3); //linkArray, streamedArray, fullName + * + * @endcode + * + * @lib CEDContactorService + * @since S60 v5.0 + */ +NONSHARABLE_CLASS(CEDContactorService) : public CBase + { +public: + + /** + * Parameter class for the service. + * + * @since S60 v5.0 + */ + class TCSParameter + { + public: + + /** Flags for controlling CCA Contactor Service */ + enum TControlFlags + { + /** + * Enable defaults. If this is set, AIW popup query will automatically search possible + * default settings and if found one, it doesn't show selection query at all. + */ + EEnableDefaults = 0x0001, + + /** + * Execute service as forced. If this is set, then voice call will be + * executed as forced cs voice call. Doesn't affect other services currently. + */ + EForcedService = 0x0002 + }; + + /* + * Constructor + */ + inline TCSParameter( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aCommTypeSelector, + TDesC8& aContactLinkArray, TUint aControlFlag, TDesC& aFullName) : + iCommTypeSelector(aCommTypeSelector), + iContactLinkArray(aContactLinkArray), + iControlFlag(aControlFlag), + iFullName(aFullName) + { + }; + + /* + * Enumeration for inticating which communication method is wanted to use. + */ + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector iCommTypeSelector; + + /* + * Streamed contact link array of contact who will be communicated at. + */ + TDesC8& iContactLinkArray; + + /** + * Flag for controlling behaviour of service. Currently only set of default + * and forced service supported. + */ + TUint iControlFlag; + + /* + * Some communication methods requires contacts name order to use services. + * (for example mms/sms editor) + */ + TDesC& iFullName; + }; + + /** + * + */ + IMPORT_C static CEDContactorService* NewL( MEDContactorObserver* aObserver ); + + /** + * Destructor. + */ + virtual ~CEDContactorService(); + + /** + * Start communication service. + * + * If the contactlink contains a multiple contact fields for selected communication + * method, the executed service will launch Phbk AIW selection popup. User have to select + * wanted field to be used for communication. + * The communication method is defined by TVPbkCommTypeSelector. + * After selection, communication is automatically started by the service. + * + * @see TVPbkCommTypeSelector from VPbkFieldTypeSelectorFactory.h. + * Leaves KErrArgument if given parameter doesn't have valid values. + * + * @since S60 5.0 + * @param aParameter: The Launch Parameter. + */ + IMPORT_C void ExecuteServiceL(const TCSParameter& aParameter); + + /** + * Cancels an ongoing service execution. + */ + IMPORT_C void CancelService(); + + /** + * Is contactor service busy. + */ + IMPORT_C TBool IsBusy() const; + +private: + /** + * Constructor. + */ + CEDContactorService( MEDContactorObserver* aObserver ); + + /** + * + */ + void ConstructL(); + +private: + // data + + /** + * + */ + CEDContactorServiceOperator* iOperator; + + /** + * ETrue, if command is being handled at the moment + */ + TBool iCommandIsBeingHandled; + + TInt iResourceFileOffset; + + MEDContactorObserver* iObserver; + }; + +#endif //__EDCONTACTORSERVICE_H__ + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactorserviceheaders.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactorserviceheaders.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,59 @@ +/* +* 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: ccacontactorservice's headers +* +*/ + + +#ifndef __EDCONTACTORSERVICEHEADERS_H__ +#define __EDCONTACTORSERVICEHEADERS_H__ + +// Constants +#include +#define KEDContactorServiceLoggerFile CCA_L("ccacontactorservice.txt") +_LIT( KEDContactorServiceResourceFileName, "\\resource\\ccacontactorservicersc.rsc" ); +_LIT( KColon, ":" ); + + +// system +#include +#include +#include +#include + +//Phbk +#include + +// AIW +#include +#include +#include +#include + +//SPSettings +#include +#include + +//own +#include "edcontactorservice.h" +#include "edcontactorserviceoperator.h" +#include "medcontactorobserver.h" +#include "edcontactorpopuphandler.h" +#include + +#include "edcontactor.h" + +#include "easydialinglogger.h" + +#endif // __EDCONTACTORSERVICEHEADERS_H__ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactorserviceoperator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactorserviceoperator.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,175 @@ +/* +* 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: Class for handling service logic. +* +*/ + + +#ifndef EDCONTACTORSERVICEHANDLER_H +#define EDCONTACTORSERVICEHANDLER_H + +#include +#include + +//FORWARD DECLERATIONS +class CEDContactorPopupHandler; + +/** + * CEDContactorServiceOperator + * Handling logic of service. + * + * @code + * + * @endcode + * + * @lib ccacontactorservice + * @since S60 v5.0 + */ +NONSHARABLE_CLASS(CEDContactorServiceOperator) : public CBase + { + +public: + + /** + * Two-phased constructor. + */ + static CEDContactorServiceOperator* NewLC( MEDContactorObserver* aObserver ); + + static CEDContactorServiceOperator* NewL( MEDContactorObserver* aObserver ); + + /** + * Destructor. + */ + virtual ~CEDContactorServiceOperator(); + +public: + //new methods + + /** + * Start service. + * All leaves are trapped. + * + * @since S60 5.0 + */ + void Execute(const CEDContactorService::TCSParameter& aParameter); + + /** + * Cancel an ongoing operation. + */ + void Cancel(); + +private: + /** + * Constructor. + */ + CEDContactorServiceOperator( MEDContactorObserver* aObserver ); + + void ConstructL(); + +private: //new methods + /** + * Helper class for handling special cases. + * Currently VOIP ServiceID implemented. + * + * @param aFieldData: Selected field. + * @since S60 5.0 + */ + void ResolveSpecialCasesL(const TDesC& aFieldData); + + /** + * Helper class for searching ServiceID + * + * @param aFieldData: Selected field. + * @return ServiceId + * @since S60 5.0 + */ + TUint32 ResolveServiceIdL(const TDesC& aFieldData); + + /** + * Helper class for parsing xSP identification. + * + * @param aFieldData: Selected field. + * @param aXSPId: Found xSP ID. + * @return boolean if xSP is found. + * @since S60 5.0 + */ + TBool ExtractServiceL(const TDesC& aFieldData, TPtrC& aXSPId); + + /** + * Helper class for searching ServiceId from spsettings + * + * @param aFieldData: Selected field. + * @return ServiceId + * @since S60 5.0 + */ + TUint32 SearchServiceIdL(const TDesC& aFieldData); + + /** + * Helper class for checking if MSISDN addressing is supported. + * + * @return ServiceId + * @since S60 5.0 + */ + TUint32 ResolveMSISDNAddressingSupportedL(); + + /** + * Helper class for starting communication method. + * + * @param aFieldData: Selected field. + * @since S60 5.0 + */ + void LaunchCommunicationMethodL(const TDesC& aFieldData); + + /** + * Helper class for mapping AIW enum & selector factory enums together. + * + * @param aCommTypeSelector: Selector factory enum. + * @return AIW communication enum. + * @since S60 5.0 + */ + TAiwCommAddressSelectType CommunicationEnumMapper( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aCommTypeSelector); + + +private: + // data + + /** + * Pointer to popup handler class + * Own. + */ + CEDContactorPopupHandler* iPopupHandler; + + /** + * Reference to the launch parameter. + * Not own. + */ + const CEDContactorService::TCSParameter* iParameter; + + /** + * ServiceId for VOIP service. + * Own. + */ + TUint32 iServiceId; + + /** + * Observer for contactor events. + * Not owned. + */ + MEDContactorObserver* iObserver; + }; + +#endif // EDCONTACTORSERVICEHANDLER_H + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactorunieditoroperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactorunieditoroperation.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,88 @@ +/* +* 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: Class implementing the unieditor operation (SMS/MMS) +* +*/ + + +#ifndef EDCONTACTORUNIEDITOROPERATION_H +#define EDCONTACTORUNIEDITOROPERATION_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION +class CEDContactorOperation; + +/** + * Class implementing the unieditor operation (SMS/MMS) + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib ccappcommlauncherplugin.dll + * @since S60 v5.0 + */ +NONSHARABLE_CLASS(CEDContactorUniEditorOperation) : public CEDContactorOperation + { +public: + // Constructors and destructor + + /** + * Destructor. + */ + ~CEDContactorUniEditorOperation(); + + /** + * Two-phased constructor. + * + * @param aParam The phone number to send the message to + * @param aName The name of the contact, to be shown in the "to" field + */ + static CEDContactorUniEditorOperation* NewL(const TDesC& aParam, const TDesC& aName); + + /** + * Two-phased constructor. + * + * @param aParam The phone number to send the message to + * @param aName The name of the contact, to be shown in the "to" field + */ + static CEDContactorUniEditorOperation* NewLC(const TDesC& aParam, const TDesC& aName); + + /** + * Executes the operation (starts editor for sending the message) + */ + virtual void ExecuteLD(); + +private: + + /** + * Constructor for performing 1st stage construction + * + * @param aParam The phone number to send the message to + * @param aName The name of the contact, to be shown in the "to" field + */ + CEDContactorUniEditorOperation(const TDesC& aParam, const TDesC& aName); + + /** + * EPOC default constructor for performing 2nd stage construction + */ + void ConstructL(); + + }; + +#endif // EDCONTACTORUNIEDITOROPERATION_H +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactorvideocalloperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactorvideocalloperation.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,85 @@ +/* +* 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: Class implementing the video call operation +* +*/ + + +#ifndef EDCONTACTORVIDEOCALLOPERATION_H +#define EDCONTACTORVIDEOCALLOPERATION_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION +class CEDContactorOperation; + +/** + * Class implementing the video call operation + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib + * @since S60 v5.0 + */ +NONSHARABLE_CLASS(CEDContactorVideocallOperation) : public CEDContactorOperation + { +public: + // Constructors and destructor + + /** + * Destructor. + */ + ~CEDContactorVideocallOperation(); + + /** + * Two-phased constructor. + * + * @param aParam The phone number to video call + */ + static CEDContactorVideocallOperation* NewL(const TDesC& aParam); + + /** + * Two-phased constructor. + * + * @param aParam The phone number to video call + */ + static CEDContactorVideocallOperation* NewLC(const TDesC& aParam); + + /** + * Executes the operation (makes the video call) + */ + virtual void ExecuteLD(); + +private: + + /** + * Constructor for performing 1st stage construction + * + * @param aParam The phone number to video call + */ + CEDContactorVideocallOperation(const TDesC& aParam); + + /** + * EPOC default constructor for performing 2nd stage construction + */ + void ConstructL(); + + }; + +#endif // EDCONTACTORVIDEOCALLOPERATION_H +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edcontactorvoipoperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edcontactorvoipoperation.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,93 @@ +/* +* 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: Class implementing the voip operation +* +*/ + + +#ifndef EDCONTACTORVOIPOPERATION_H +#define EDCONTACTORVOIPOPERATION_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION +class CEDContactorOperation; + +/** + * Class implementing the voip operation + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib + * @since S60 v5.0 + */ +NONSHARABLE_CLASS(CEDContactorVOIPOperation) : public CEDContactorOperation + { +public: + // Constructors and destructor + + /** + * Destructor. + */ + ~CEDContactorVOIPOperation(); + + /** + * Two-phased constructor. + * + * @param aParam The address to make the voip call to + * @param aServiceID The voip service ID + */ + static CEDContactorVOIPOperation* NewL(const TDesC& aParam, TUint32 aServiceID); + + /** + * Two-phased constructor. + * + * @param aParam The address to make the voip call to + * @param aServiceID The voip service ID + */ + static CEDContactorVOIPOperation* NewLC(const TDesC& aParam, TUint32 aServiceID); + + /** + * Executes the operation (launches the voip call) + */ + virtual void ExecuteLD(); + +private: + + /** + * Constructor for performing 1st stage construction + * + * @param aParam The address to make the voip call to + * @param aServiceID The voip service ID + */ + CEDContactorVOIPOperation(const TDesC& aParam, TUint32 aServiceID); + + /** + * EPOC default constructor for performing 2nd stage construction + */ + void ConstructL(); + + /** + * The voip service id + */ + TUint32 iServiceId; + + }; + +#endif // EDCONTACTORVOIPOPERATION_H +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edmsgeditors.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edmsgeditors.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,53 @@ +/* +* 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: Launching Editors. +* +*/ + + +#ifndef __EDMSGEDITORS_H__ +#define __EDMSGEDITORS_H__ + +#include + +/** + * Helper class for launching message editors + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib + * @since S60 v5.0 + */ +NONSHARABLE_CLASS(CEDMsgEditors) : public CBase + { +public: + + /** + * Launch a msg editor. + * + * @param TUid Service uid (MTM) + * @param TDesC& Address where to send the msg + * @param TDesC& Alias name for msg editor + * + * @return void + */ + static void ExecuteL( const TUid aServiceUid, const TDesC& aAddress, + const TDesC& aName); + + }; + +#endif // __EDMSGEDITORS_H__ +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/edphonecall.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/edphonecall.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,75 @@ +/* +* 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: Launching Calls. +* +*/ + + +#ifndef __EDPHONECALL_H__ +#define __EDPHONECALL_H__ + +#include + +// CLASS DECLARATION +class CAiwDialDataExt; + + +/** + * Helper class for launching calls (voice, voip & video) + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib + * @since S60 v5.0 + */ +class CEDPhoneCall : public CBase + { +public: + + /** + * Type of call + */ + enum TEDPhoneCallType { ECCACallTypeVoice, ECCACallTypeVoIP, ECCACallTypeVideo }; + + /** + * Establish a call by using a phone number (or voip address) + * + * @param TDesC8& Phone number + * @param aCallType Is this a cellular Voice, VoIP, or Video call + * @param aForceCallType Whether to execute call type as forced one. + * Currently only voice call type can be variated with this. + * + * @return void + */ + static void ExecuteL( const TDesC& aPhoneNumber, TEDPhoneCallType aCallType, + TBool aForcedCallType, + TUint32 aServiceId = 0); + +private: + + /** + * Establish a call by using a phone number + * + * @param TDesC8& Phone number + * @param TBool Is this a VoIP call + * + * @return void + */ + static void DoAIWCallL( CAiwDialDataExt& aDialData); + }; + +#endif // __EDPHONECALL_H__ +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/inc/medcontactorobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/inc/medcontactorobserver.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,61 @@ +/* +* 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: Class implementing the abstract contactor observer class. +* +*/ + +#ifndef MEDCONTACTOROBSERVER_H_ +#define MEDCONTACTOROBSERVER_H_ + +/** + * MEDContactorObserver + * + * Observer class for contactor module. + * + * + * + */ + +class MEDContactorObserver + { + +public: + + /* + * Enum for communication events. + */ + typedef enum TEvent_enum + { + /* + * ECommunicationStarted + * Used when communication was normally started. + */ + ECommunicationStarted = 1, + + /* + * ECommunicationCancelled + * Used when + * 1. User cancelled communication when choosing phone number, email, etc. + * 2. When there was no appropriate field in the contact. + */ + ECommunicationCancelled + + } TEvent; + + virtual void InformContactorEvent( TEvent aEvent ) = 0; + }; + + + +#endif /* MEDCONTACTOROBSERVER_H_ */ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edcontactor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edcontactor.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,63 @@ +/* +* 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: Implementation of the ccacontactor +* +*/ + + +// INCLUDE FILES +#include "edcontactorheaders.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// EDContactor::ExecuteServiceL() +// ----------------------------------------------------------------------------- +// +void CEDContactor::ExecuteServiceL(VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aCommMethod, const TDesC& aParam, const TDesC& aName, + TBool aForcedService, TUint32 aServiceId) + { + CEDContactorOperation* operation = 0; + + switch (aCommMethod) + { + case VPbkFieldTypeSelectorFactory::EVoiceCallSelector: + operation = CEDContactorCallOperation::NewL(aParam, aForcedService); + break; + + case VPbkFieldTypeSelectorFactory::EVideoCallSelector: + operation = CEDContactorVideocallOperation::NewL(aParam); + break; + case VPbkFieldTypeSelectorFactory::EUniEditorSelector: + operation = CEDContactorUniEditorOperation::NewL(aParam, aName); + break; + case VPbkFieldTypeSelectorFactory::EEmailEditorSelector: + operation = CEDContactorEmailOperation::NewL(aParam, aName); + break; + case VPbkFieldTypeSelectorFactory::EVOIPCallSelector: + operation = CEDContactorVOIPOperation::NewL(aParam, aServiceId); + break; + case VPbkFieldTypeSelectorFactory::EInstantMessagingSelector: + operation = CEDContactorIMOperation::NewL(aParam); + break; + + } + if (operation) + { + operation->ExecuteLD(); + operation = NULL; + } + } +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edcontactorcalloperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edcontactorcalloperation.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,89 @@ +/* +* 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: Implementation of the call operation +* +*/ + + +// INCLUDE FILES +#include "edcontactorheaders.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CEDContactorCallOperation::CEDContactorCallOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorCallOperation::CEDContactorCallOperation(const TDesC& aParam, + TBool aForcedCallType) : CEDContactorOperation(aParam), + iForcedCallType( aForcedCallType ) + { + } + +// ----------------------------------------------------------------------------- +// CEDContactorCallOperation::~CEDContactorCallOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorCallOperation::~CEDContactorCallOperation() + { + } + +// ----------------------------------------------------------------------------- +// CEDContactorCallOperation::NewLC() +// ----------------------------------------------------------------------------- +// +CEDContactorCallOperation* CEDContactorCallOperation::NewLC(const TDesC& aParam, + TBool aForcedCallType ) + { + CEDContactorCallOperation* self = + new (ELeave)CEDContactorCallOperation(aParam, aForcedCallType); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorCallOperation::NewL() +// ----------------------------------------------------------------------------- +// +CEDContactorCallOperation* CEDContactorCallOperation::NewL(const TDesC& aParam, + TBool aForcedCallType) + { + CEDContactorCallOperation* self = + CEDContactorCallOperation::NewLC(aParam,aForcedCallType); + CleanupStack::Pop(); // self; + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorCallOperation::ConstructL() +// ----------------------------------------------------------------------------- +// +void CEDContactorCallOperation::ConstructL() + { + + } + +// ----------------------------------------------------------------------------- +// CEDContactorCallOperation::ExecuteLD() +// ----------------------------------------------------------------------------- +// +void CEDContactorCallOperation::ExecuteLD() + { + CleanupStack::PushL(this); + CEDPhoneCall::ExecuteL(iParam, CEDPhoneCall::ECCACallTypeVoice, iForcedCallType ); + CleanupStack::PopAndDestroy(this); + } +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edcontactoremailoperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edcontactoremailoperation.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,85 @@ +/* +* 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: Implementation of the email operation +* +*/ + + +// INCLUDE FILES +#include "edcontactorheaders.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CEDContactorEmailOperation::CEDContactorEmailOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorEmailOperation::CEDContactorEmailOperation(const TDesC& aParam, const TDesC& aName) : + CEDContactorOperation(aParam, aName) + { + } + +// ----------------------------------------------------------------------------- +// CEDContactorEmailOperation::~CEDContactorEmailOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorEmailOperation::~CEDContactorEmailOperation() + { + // No implementation required + } + +// ----------------------------------------------------------------------------- +// CEDContactorEmailOperation::NewLC() +// ----------------------------------------------------------------------------- +// +CEDContactorEmailOperation* CEDContactorEmailOperation::NewLC(const TDesC& aParam, const TDesC& aName) + { + CEDContactorEmailOperation* self = new (ELeave)CEDContactorEmailOperation(aParam, aName); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorEmailOperation::NewL() +// ----------------------------------------------------------------------------- +// +CEDContactorEmailOperation* CEDContactorEmailOperation::NewL(const TDesC& aParam, const TDesC& aName) + { + CEDContactorEmailOperation* self=CEDContactorEmailOperation::NewLC(aParam, aName); + CleanupStack::Pop(); // self; + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorEmailOperation::ConstructL() +// ----------------------------------------------------------------------------- +// +void CEDContactorEmailOperation::ConstructL() + { + + } + +// ----------------------------------------------------------------------------- +// CEDContactorEmailOperation::ExecuteLD() +// ----------------------------------------------------------------------------- +// +void CEDContactorEmailOperation::ExecuteLD() + { + CleanupStack::PushL(this); + CEDMsgEditors::ExecuteL(KSenduiMtmSmtpUid, iParam, + iName); + CleanupStack::PopAndDestroy(this); + } +// Enf of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edcontactorimoperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edcontactorimoperation.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,186 @@ +/* +* 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: Implementation of the im operation +* +*/ + + +// INCLUDE FILES + +#include "edcontactorheaders.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CEDContactorIMOperation::CEDContactorIMOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorIMOperation::CEDContactorIMOperation(const TDesC& aParam) : CEDContactorOperation(aParam) + { + iPlugin = NULL; + } + +// ----------------------------------------------------------------------------- +// CEDContactorIMOperation::~CEDContactorIMOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorIMOperation::~CEDContactorIMOperation() + { + delete iPlugin; + iPlugin = NULL; + REComSession::FinalClose(); + delete iSPSettings; + } + +// ----------------------------------------------------------------------------- +// CEDContactorIMOperation::NewLC() +// ----------------------------------------------------------------------------- +// +CEDContactorIMOperation* CEDContactorIMOperation::NewLC(const TDesC& aParam) + { + CEDContactorIMOperation* self = new (ELeave)CEDContactorIMOperation(aParam); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorIMOperation::NewL() +// ----------------------------------------------------------------------------- +// +CEDContactorIMOperation* CEDContactorIMOperation::NewL(const TDesC& aParam) + { + CEDContactorIMOperation* self=CEDContactorIMOperation::NewLC(aParam); + CleanupStack::Pop(); // self; + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorIMOperation::ConstructL() +// ----------------------------------------------------------------------------- +// +void CEDContactorIMOperation::ConstructL() + { + iSPSettings = CSPSettings::NewL(); + } + +// ----------------------------------------------------------------------------- +// CEDContactorIMOperation::ExecuteLD() +// ----------------------------------------------------------------------------- +// +void CEDContactorIMOperation::ExecuteLD() + { + CleanupStack::PushL(this); + TPtrC aXspId = iParam; + + TUid dllUid = ResolveEcomUidL( ExtractService(aXspId) ); + LoadEcomL( dllUid, aXspId ); + CleanupStack::PopAndDestroy(this); + } + +// -------------------------------------------------------------------------- +// CEDContactorIMOperation::ResolveEcomUidL +// -------------------------------------------------------------------------- +// +TUid CEDContactorIMOperation::ResolveEcomUidL( const TDesC& aServiceId ) + { + // Resolve ECom UID from SP settings + TInt launchId = KErrNotFound; + + launchId = DoResolveEcomUidL( aServiceId ); + TUid launchUid = {launchId }; + return launchUid; + } + +// -------------------------------------------------------------------------- +// CEDContactorIMOperation::DoResolveEcomUidL +// -------------------------------------------------------------------------- +// +TInt CEDContactorIMOperation::DoResolveEcomUidL( const TDesC& aServiceId ) + { + // Resolve ECom UID from SP settings + TInt err = KErrNone; + TInt launchId = KErrNotFound; + CDesCArrayFlat* nameArray = NULL; + + RIdArray ids; + CleanupClosePushL( ids ); + + nameArray = new (ELeave) CDesCArrayFlat(2); + CleanupStack::PushL( nameArray ); + + err = iSPSettings->FindServiceIdsL( ids ); + User::LeaveIfError( err ); + err = iSPSettings->FindServiceNamesL( ids, *nameArray ); + User::LeaveIfError( err ); + + TInt count = nameArray->MdcaCount(); + for ( TInt i(0); i < count; i++) + { + // search the mathching service name + TPtrC p = nameArray->MdcaPoint( i ); + if (!p.CompareF( aServiceId )) + { + // We have found the service, now get the plugin id + CSPProperty* IMLaunchIdProperty = CSPProperty::NewLC(); + err = iSPSettings->FindPropertyL( ids[i], ESubPropertyIMLaunchUid, *IMLaunchIdProperty ); + User::LeaveIfError( err ); + err = IMLaunchIdProperty->GetValue( launchId ); + User::LeaveIfError( err ); + CleanupStack::PopAndDestroy( IMLaunchIdProperty ); + break; + } + } + CleanupStack::PopAndDestroy( nameArray ); + CleanupStack::PopAndDestroy( ); // >>> ids + + return launchId; + } + +// -------------------------------------------------------------------------- +// CEDContactorIMOperation::LoadEcomL +// -------------------------------------------------------------------------- +// +void CEDContactorIMOperation::LoadEcomL( TUid aUidImp, const TDesC& aXspId ) + { + TUid destructorId; + + TAny* volatile implementation = + REComSession::CreateImplementationL( aUidImp, + destructorId ); + + iPlugin = reinterpret_cast< CCmsContactorImPluginBase* >( implementation ); + iPlugin->SetDestructorId( destructorId ); + iPlugin->ExecuteL( aXspId ); + } + +// -------------------------------------------------------------------------- +// CEDContactorIMOperation::ExtractService +// -------------------------------------------------------------------------- +// +TPtrC CEDContactorIMOperation::ExtractService( const TDesC& aXspId ) + { + TInt pos = aXspId.Find(KColon); + if ( pos >= 0) + { + // ok input + return aXspId.Left(pos); + } + else + { + // return something in illegal input case + return TPtrC(KNullDesC); + } + } +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edcontactoroperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edcontactoroperation.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,41 @@ +/* +* 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: Implementation of the base class of contactor operations +* +*/ + + +// INCLUDE FILES +#include "edcontactorheaders.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CEDContactorOperation::CEDContactorOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorOperation::CEDContactorOperation(const TDesC& aParam, const TDesC& aName) : iParam(aParam), iName(aName) + { + } + +// ----------------------------------------------------------------------------- +// CEDContactorOperation::~CEDContactorOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorOperation::~CEDContactorOperation() + { + // No implementation required + } +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edcontactorpopuphandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edcontactorpopuphandler.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,296 @@ +/* +* 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: Class for handling popup query. +* +*/ + + +#include +#include +#include +#include +#include + +#include "edcontactorserviceheaders.h" + +#include + +// ================= MEMBER FUNCTIONS ======================= +// + +// -------------------------------------------------------------------------- +// CEDContactorPopupHandler::NewL +// -------------------------------------------------------------------------- +// +CEDContactorPopupHandler* CEDContactorPopupHandler::NewL() + { + CEDContactorPopupHandler* self = new (ELeave) CEDContactorPopupHandler(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// -------------------------------------------------------------------------- +// CEDContactorPopupHandler::~CEDContactorPopupHandler +// -------------------------------------------------------------------------- +// +CEDContactorPopupHandler::~CEDContactorPopupHandler() + { + LOGSTRING("CEDContactorPopupHandler::~CEDContactorPopupHandler"); + delete iServiceHandler; + delete iSchedulerWait; + iCoeEnv.DeleteResourceFile (iResourceOffset); + delete iQueryResults; + } + +// -------------------------------------------------------------------------- +// CEDContactorPopupHandler::LaunchPopupL +// -------------------------------------------------------------------------- +// +TDesC& CEDContactorPopupHandler::LaunchPopupL( + const TDesC8& aContactLinkArray, + TAiwCommAddressSelectType aCommAddressSelectType, + TBool aUseDefaults ) + { + LOGSTRING("CEDContactorPopupHandler::LaunchPopupL"); + + __ASSERT_ALWAYS (NULL != &aContactLinkArray, User::Leave (KErrArgument)); + __ASSERT_ALWAYS (0 < aContactLinkArray.Size(), User::Leave (KErrArgument)); + + TUint fetchFlags = 0; + + // Stop scheduler just in case this is called while operation is still ongoing. + AsyncStop(); + + // Set service data + TAiwSingleItemSelectionDataV3 data; + + if (!aUseDefaults) + { + fetchFlags |= ::EDoNotUseDefaultField; + } + + data.SetFlags(fetchFlags); + data.SetCommAddressSelectType(aCommAddressSelectType); + CAiwGenericParamList& inParamList = iServiceHandler->InParamListL(); + inParamList.AppendL(TAiwGenericParam(EGenericParamContactSelectionData, + TAiwVariant(TAiwSingleItemSelectionDataV3Pckg(data)))); + + // Set contactlink + inParamList.AppendL(TAiwGenericParam(EGenericParamContactLinkArray, + TAiwVariant(aContactLinkArray))); + + iServiceHandler->ExecuteServiceCmdL(KAiwCmdSelect, inParamList, + iServiceHandler->OutParamListL(), 0, this); + + // Waiting for popup selection. + // Make this whole operation look synchronous + CAknAppUi* appUi = static_cast( iCoeEnv.AppUi() ); + appUi->HandleCommandL( EPhoneCmdBlockingDialogLaunched ); + iSchedulerWait->Start(); + appUi->HandleCommandL( EPhoneCmdBlockingDialogClosed ); + + User::LeaveIfError(iError); + + LOGSTRING("CEDContactorPopupHandler::LaunchPopupL: Done."); + + return *iQueryResults; + } + +// -------------------------------------------------------------------------- +// CEDContactorPopupHandler::ClosePopupL +// -------------------------------------------------------------------------- +// +void CEDContactorPopupHandler::ClosePopupL() + { + if ( iSchedulerWait->IsStarted() ) + { + iServiceHandler->ExecuteServiceCmdL( KAiwCmdSelect, + iServiceHandler->InParamListL(), + iServiceHandler->OutParamListL(), + KAiwOptCancel, + this ); + } + } + +// -------------------------------------------------------------------------- +// CEDContactorPopupHandler::HandleNotifyL +// -------------------------------------------------------------------------- +// +TInt CEDContactorPopupHandler::HandleNotifyL(TInt aCmdId, TInt aEventId, + CAiwGenericParamList& aEventParamList, + const CAiwGenericParamList& /*aInParamList*/) + { + LOGSTRING("CEDContactorPopupHandler::HandleNotifyL"); + TInt returnValue = KErrNone; + + if (aCmdId == KAiwCmdSelect) + { + switch(aEventId) + { + case KAiwEventCompleted: + { + LOGSTRING("CEDContactorPopupHandler::HandleNotifyL: KAiwEventCompleted"); + // Selection done. + // Read and store results + TRAP(iError, ReadFieldDataL(aEventParamList)); + } + break; + + case KAiwEventCanceled: + LOGSTRING("CEDContactorPopupHandler::HandleNotifyL: KAiwEventCanceled"); + // Selection canceled. + iError = KErrCancel; + break; + + case KAiwEventError: + case KAiwEventStopped: + LOGSTRING("CEDContactorPopupHandler::HandleNotifyL: KAiwEventError or KAiwEventStopped"); + // Error occurred. + iError = KErrGeneral; + break; + + case KAiwEventQueryExit: + iError = KErrAbort; + returnValue = EFalse; // Telephony must not be allowed to be closed down + break; + + default: + LOGSTRING("CEDContactorPopupHandler::HandleNotifyL: Unknown"); + iError = KErrGeneral; + break; + } + // Stop scheduler if service execution has finished. + if ( aEventId != KAiwEventQueryExit ) + { + AsyncStop(); + } + } + + LOGSTRING("CEDContactorPopupHandler::HandleNotifyL: Done."); + return returnValue; + } + +// -------------------------------------------------------------------------- +// CEDContactorPopupHandler::CEDContactorPopupHandler +// -------------------------------------------------------------------------- +// +CEDContactorPopupHandler::CEDContactorPopupHandler() : + iCoeEnv(*CCoeEnv::Static()), + iError(KErrNone) + { + } + +// -------------------------------------------------------------------------- +// CEDContactorPopupHandler::ConstructL +// -------------------------------------------------------------------------- +// +void CEDContactorPopupHandler::ConstructL() + { + LOGSTRING("CEDContactorPopupHandler::ConstructL"); + + PrepareResourcesL(); + + iServiceHandler = CAiwServiceHandler::NewL(); + iServiceHandler->AttachL(R_EDCONTACTORSERVICE_CONTACT_SELECTION_INTEREST); + + iSchedulerWait = new (ELeave) CActiveSchedulerWait(); + + LOGSTRING("CEDContactorPopupHandler::ConstructL: Done."); + } + +// -------------------------------------------------------------------------- +// CEDContactorPopupHandler::PrepareResourcesL +// -------------------------------------------------------------------------- +// +void CEDContactorPopupHandler::PrepareResourcesL() + { + LOGSTRING("CEDContactorPopupHandler::PrepareResourcesL"); + + // preparing resources for use + TFileName fileName; + fileName.Append (KEDContactorServiceResourceFileName); + + BaflUtils::NearestLanguageFile (iCoeEnv.FsSession (), fileName); + if (ConeUtils::FileExists (fileName)) + { + iResourceOffset = iCoeEnv.AddResourceFileL (fileName); + } + else // not found from user drive, leave badly. + { + LOGSTRING("CEDContactorPopupHandler::PrepareResourcesL: Resource file not exists."); + User::Leave (KErrGeneral); + } + + LOGSTRING("CEDContactorPopupHandler::PrepareResourcesL: Done."); + } + +// -------------------------------------------------------------------------- +// CEDContactorPopupHandler::ReadFieldDataL +// -------------------------------------------------------------------------- +// +void CEDContactorPopupHandler::ReadFieldDataL( + CAiwGenericParamList& aEventParamList) + { + LOGSTRING("CEDContactorPopupHandler::ReadFieldDataL"); + + if (iQueryResults) + { + delete iQueryResults; + iQueryResults = NULL; + } + + TInt index = 1; // Get field data from index 1 + const TAiwGenericParam* param = + aEventParamList.FindFirst(index, EGenericParamContactFieldData); + if (KErrNotFound != index) + { + TInt length = param->Value().AsDes().Length(); + iQueryResults = HBufC::NewL(length); + iQueryResults->Des().Append(param->Value().AsDes()); + + // Data must be found! + if (0 >= iQueryResults->Length()) + { + LOGSTRING("CEDContactorPopupHandler::ReadFieldDataL: Failed to get field data!"); + User::Leave(KErrGeneral); + } + } + else + { + LOGSTRING("CEDContactorPopupHandler::ReadFieldDataL: Not found!"); + User::Leave(KErrNotFound); + } + + LOGSTRING("CEDContactorPopupHandler::ReadFieldDataL: Done."); + } + +// -------------------------------------------------------------------------- +// CEDContactorPopupHandler::AsyncStop +// -------------------------------------------------------------------------- +// +void CEDContactorPopupHandler::AsyncStop() + { + LOGSTRING("CEDContactorPopupHandler::AsyncStop"); + + if(iSchedulerWait->IsStarted()) + { + iSchedulerWait->AsyncStop(); + } + + LOGSTRING("CEDContactorPopupHandler::AsyncStop: Done."); + } + +// End of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edcontactorservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edcontactorservice.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,126 @@ +/* +* 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: This is a class for starting services +* +*/ + +#include + +#include "edcontactorserviceheaders.h" + +_LIT(KContactorResourceFile, "\\resource\\edcontactor.rsc"); + + +// ================= MEMBER FUNCTIONS ======================= + +// -------------------------------------------------------------------------- +// CEDContactorService::ExecuteServiceL +// -------------------------------------------------------------------------- +// +EXPORT_C CEDContactorService* CEDContactorService::NewL( MEDContactorObserver* aObserver ) + { + CEDContactorService* self = new (ELeave) CEDContactorService(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// -------------------------------------------------------------------------- +// Destructor +// -------------------------------------------------------------------------- +// +CEDContactorService::~CEDContactorService() + { + delete iOperator; + + CCoeEnv* coe = CCoeEnv::Static(); + if( coe ) + { + coe->DeleteResourceFile( iResourceFileOffset ); + } + } + +// -------------------------------------------------------------------------- +// Constructor +// -------------------------------------------------------------------------- +// +CEDContactorService::CEDContactorService( MEDContactorObserver* aObserver ) : +iObserver(aObserver) + { + } + +// -------------------------------------------------------------------------- +// CEDContactorService::ConstructL +// -------------------------------------------------------------------------- +// +void CEDContactorService::ConstructL() + { + CCoeEnv* coe = CCoeEnv::Static(); + if( coe ) + { + TFileName dllFileName; + Dll::FileName( dllFileName ); + + TParse parse; + User::LeaveIfError(parse.Set(KContactorResourceFile, &dllFileName, NULL)); + TFileName resourceFileName(parse.FullName()); + + iResourceFileOffset = coe->AddResourceFileL( resourceFileName ); + } + + iOperator = CEDContactorServiceOperator::NewL( iObserver ); + } + +// -------------------------------------------------------------------------- +// CEDContactorService::ExecuteServiceL +// -------------------------------------------------------------------------- +// +EXPORT_C void CEDContactorService::ExecuteServiceL( + const TCSParameter& aParameter) + { + LOGSTRING("CEDContactorService::ExecuteServiceL(): enter"); + + iCommandIsBeingHandled = ETrue; + + // All leaves are trapped in op class. + iOperator->Execute(aParameter); + + iCommandIsBeingHandled = EFalse; + + LOGSTRING("CEDContactorService::ExecuteServiceL(): exit"); + } + +// -------------------------------------------------------------------------- +// CEDContactorService::CancelService +// -------------------------------------------------------------------------- +// +EXPORT_C void CEDContactorService::CancelService() + { + if ( iOperator ) + { + iOperator->Cancel(); + } + } + +// -------------------------------------------------------------------------- +// CEDContactorService::IsBusy +// -------------------------------------------------------------------------- +// +EXPORT_C TBool CEDContactorService::IsBusy() const + { + return iCommandIsBeingHandled; + } + +// End of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edcontactorserviceoperator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edcontactorserviceoperator.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,493 @@ +/* +* 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: Class for handling service logic. +* +*/ + +#include +#include + +#include "edcontactorserviceheaders.h" + +// ================= MEMBER FUNCTIONS ======================= +// + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::NewLC +// -------------------------------------------------------------------------- +// +CEDContactorServiceOperator* CEDContactorServiceOperator::NewLC( MEDContactorObserver* aObserver ) + { + CEDContactorServiceOperator* self = new (ELeave) CEDContactorServiceOperator(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::NewL +// -------------------------------------------------------------------------- +// +CEDContactorServiceOperator* CEDContactorServiceOperator::NewL( MEDContactorObserver* aObserver ) + { + CEDContactorServiceOperator* self = CEDContactorServiceOperator::NewLC(aObserver); + CleanupStack::Pop(self); + return self; + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::~CEDContactorServiceOperator +// -------------------------------------------------------------------------- +// +CEDContactorServiceOperator::~CEDContactorServiceOperator() + { + LOGSTRING("CEDContactorServiceOperator::~CEDContactorServiceOperator"); + + delete iPopupHandler; + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::Execute +// -------------------------------------------------------------------------- +// +void CEDContactorServiceOperator::Execute( + const CEDContactorService::TCSParameter& aParameter) + { + LOGSTRING("CEDContactorServiceOperator::Execute"); + + iParameter = &aParameter; + + /** + * LOGIC: + * 1. Launch AIW popup + * 2. Special cases: Find out serviceid for voip + * 3. Launch communication service + * + * All actions are trapped here. + */ + TDesC* result = NULL; + TBool useDefaults = EFalse; + + // Check default control flag + if (CEDContactorService::TCSParameter::EEnableDefaults & + iParameter->iControlFlag) + { + useDefaults = ETrue; + } + + // Launch popup + TRAPD(err, result = &iPopupHandler->LaunchPopupL( + iParameter->iContactLinkArray, + CommunicationEnumMapper(iParameter->iCommTypeSelector), + useDefaults)); + + if (KErrNone != err) + { + LOGSTRING1("CEDContactorServiceOperator::ExecuteL: LaunchPopupL: Leaves %d.", err); + + if (iObserver) + { + iObserver->InformContactorEvent(MEDContactorObserver::ECommunicationCancelled); + } + return; + } + + // Resolve special cases + TRAP(err, ResolveSpecialCasesL(*result)); + + if (KErrNone != err) + { + LOGSTRING1("CEDContactorServiceOperator::ExecuteL: ResolveSpecialCasesL: Leaves %d.", err); + + if (iObserver) + { + iObserver->InformContactorEvent(MEDContactorObserver::ECommunicationCancelled); + } + return; + } + + // Launch communication service + TRAP(err, LaunchCommunicationMethodL(*result)); + + if (KErrNone != err) + { + LOGSTRING1("CEDContactorServiceOperator::ExecuteL: LaunchCommunicationMethodL: Leaves %d.", err); + + if (iObserver) + { + iObserver->InformContactorEvent(MEDContactorObserver::ECommunicationCancelled); + } + return; + } + LOGSTRING("CEDContactorServiceOperator::Execute: Done."); + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::Cancel +// -------------------------------------------------------------------------- +// +void CEDContactorServiceOperator::Cancel() + { + if ( iPopupHandler ) + { + TRAP_IGNORE( iPopupHandler->ClosePopupL() ); + } + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::CEDContactorServiceOperator +// -------------------------------------------------------------------------- +// +CEDContactorServiceOperator::CEDContactorServiceOperator( MEDContactorObserver* aObserver ): + iServiceId((TUint32)KErrNotFound), + iObserver(aObserver) + { + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::ConstructL +// -------------------------------------------------------------------------- +// +void CEDContactorServiceOperator::ConstructL() + { + LOGSTRING("CEDContactorServiceOperator::ConstructL"); + + iPopupHandler = CEDContactorPopupHandler::NewL(); + + LOGSTRING("CEDContactorServiceOperator::ConstructL: Done."); + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::ResolveSpecialCasesL +// -------------------------------------------------------------------------- +// +void CEDContactorServiceOperator::ResolveSpecialCasesL(const TDesC& aFieldData) + { + LOGSTRING("CEDContactorServiceOperator::ResolveSpecialCasesL"); + + /* + * Currently only VOIP ServiceId is needed to find out. + */ + switch(iParameter->iCommTypeSelector) + { + case VPbkFieldTypeSelectorFactory::EVOIPCallSelector: + iServiceId = ResolveServiceIdL(aFieldData); + break; + } + + LOGSTRING("CEDContactorServiceOperator::ResolveSpecialCasesL: Done."); + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::ResolveServiceIdL +// -------------------------------------------------------------------------- +// +TUint32 CEDContactorServiceOperator::ResolveServiceIdL(const TDesC& aFieldData) + { + LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL"); + + __ASSERT_ALWAYS (NULL != &aFieldData, User::Leave (KErrArgument)); + __ASSERT_ALWAYS (0 < aFieldData.Size(), User::Leave (KErrArgument)); + + TUint32 ret = (TUint32)KErrNotFound; + + //LOGIC: + /* + * 1. Find out is there xSP prefix ( voip address for some specific service provider ) + * 2. If there is, search service id + * 3. If not, find out how many services support msisdn + * 4. If only one, find use that service id + * 5. If more than one, do not use service id. User will be prompt which service to use. + */ + + TPtrC result; + + // 1. Find out is there xSP prefix + if (ExtractServiceL(aFieldData, result)) + { + LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL: ExtractServiceL found."); + + // 2. If there is, search service id + ret = SearchServiceIdL(result); + } + else + { + LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL: ExtractServiceL not found."); + + // 3. If not, find out how many services support msisdn ( normal phone number ) + ret = ResolveMSISDNAddressingSupportedL(); + if ((TUint32)KErrNotFound != ret) + { + // 4. If only one, find use that service id + // Currently no implementation. + LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL: ResolveMSISDNAddressingSupportedL only one service."); + + } + else + { + // 5. If more than one or none found, do not use service id. + // User will be asked to choose among services when call is initiated. + // Currently no implementation. + LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL: ResolveMSISDNAddressingSupportedL more than one service."); + } + } + + LOGSTRING("CEDContactorServiceOperator::ResolveServiceIdL: Done."); + + return ret; + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::ExtractServiceL +// -------------------------------------------------------------------------- +// +TBool CEDContactorServiceOperator::ExtractServiceL( + const TDesC& aFieldData, TPtrC& aXSPId) + { + LOGSTRING("CEDContactorServiceOperator::ExtractServiceL"); + + TBool found = EFalse; + + TInt pos = aFieldData.Find(KColon); + if (pos >= 0) + { + // ok input + aXSPId.Set(aFieldData.Left(pos)); + found = ETrue; + } + + LOGSTRING("CEDContactorServiceOperator::ExtractServiceL: Done."); + + return found; + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::SearchServiceIdL +// -------------------------------------------------------------------------- +// +TUint32 CEDContactorServiceOperator::SearchServiceIdL(const TDesC& aFieldData) + { + LOGSTRING("CEDContactorServiceOperator::SearchServiceIdL"); + + TUint32 ret = (TUint32)KErrNotFound; + TInt err = KErrNone; + CDesCArrayFlat* nameArray = NULL; + + RIdArray ids; + CleanupClosePushL(ids); + + nameArray = new (ELeave) CDesCArrayFlat(2); + CleanupStack::PushL(nameArray); + + CSPSettings* settings = CSPSettings::NewLC(); + + err = settings->FindServiceIdsL(ids); + User::LeaveIfError(err); + err = settings->FindServiceNamesL(ids, *nameArray); + User::LeaveIfError(err); + + TInt count = nameArray->MdcaCount(); + for (TInt i(0); i < count; i++) + { + // search the mathching service name + TPtrC p = nameArray->MdcaPoint(i); + if (!p.CompareF(aFieldData)) + { + // Service found + ret = ids[i]; + + LOGSTRING("CEDContactorServiceOperator::SearchServiceIdL: Service found."); + break; + } + } + CleanupStack::PopAndDestroy( settings ); + CleanupStack::PopAndDestroy( nameArray ); + CleanupStack::PopAndDestroy( &ids ); + + LOGSTRING("CEDContactorServiceOperator::SearchServiceIdL: Done."); + + return ret; + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::ResolveMSISDNAddressingSupportedL +// -------------------------------------------------------------------------- +// +TUint32 CEDContactorServiceOperator::ResolveMSISDNAddressingSupportedL() + { + LOGSTRING("CEDContactorServiceOperator::ResolveMSISDNAddressingSupportedL"); + + /* + * LOGIC: + * -Find out services that support calling normal mobile/telephone numbers + * -If only 1 service, return the serviceid + * -If services are more than 1, then do not use serviceid. + */ + + TInt err = KErrNone; + TInt foundNo = 0; + TUint32 ret = (TUint32)KErrNotFound; + + RIdArray ids; + CleanupClosePushL(ids); + + CSPSettings* settings = CSPSettings::NewLC(); + + err = settings->FindServiceIdsL(ids); + User::LeaveIfError(err); + + CSPProperty* property = CSPProperty::NewLC(); + + TInt count = ids.Count(); + for (TInt i(0); i < count; i++) + { + // Find out property + err = settings->FindPropertyL(ids[i], + EPropertyServiceAttributeMask, *property); + + // If service have property + if (KErrNone == err) + { + // read the value of mask property + TInt mask = 0; + err = property->GetValue(mask); + if (KErrNone == err) + { + if ((mask & ESupportsMSISDNAddressing) && + (mask & ESupportsInternetCall)) + { + // Found one. + ret = ids[i]; + foundNo++; + + }// if mask + }// if err + }// if err + + }// for + + // If more than 1 service, do not use serviceid + + if (1 < foundNo) + { + ret = (TUint32)KErrNotFound; + } + + CleanupStack::PopAndDestroy( property ); + CleanupStack::PopAndDestroy( settings ); + CleanupStack::PopAndDestroy( &ids ); + + LOGSTRING("CEDContactorServiceOperator::ResolveMSISDNAddressingSupportedL: Done."); + return ret; + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::LaunchCommunicationMethodL +// -------------------------------------------------------------------------- +// +void CEDContactorServiceOperator::LaunchCommunicationMethodL( + const TDesC& aFieldData) + { + LOGSTRING("CEDContactorServiceOperator::LaunchCommunicationMethodL"); + + __ASSERT_ALWAYS (NULL != &iParameter->iFullName, User::Leave (KErrArgument)); + __ASSERT_ALWAYS (0 < iParameter->iFullName.Size(), User::Leave (KErrArgument)); + + + TBool forcedService( EFalse ); + + // Check forced service flag + if (CEDContactorService::TCSParameter::EForcedService & + iParameter->iControlFlag) + { + forcedService = ETrue; + } + + // If serviceid found, use it. + if ((TUint32)KErrNotFound != iServiceId) + { + LOGSTRING("CEDContactorServiceOperator::ExecuteL: ExecuteServiceL with serviceid"); + CEDContactor::ExecuteServiceL( + iParameter->iCommTypeSelector, + aFieldData, + iParameter->iFullName, + forcedService, + iServiceId); + } + else + { + LOGSTRING("CEDContactorServiceOperator::ExecuteL: ExecuteServiceL without serviceid"); + CEDContactor::ExecuteServiceL( + iParameter->iCommTypeSelector, + aFieldData, + iParameter->iFullName, + forcedService); + } + + LOGSTRING("CEDContactorServiceOperator::LaunchCommunicationMethodL: Done."); + } + +// -------------------------------------------------------------------------- +// CEDContactorServiceOperator::CommunicationEnumMapper +// -------------------------------------------------------------------------- +// +TAiwCommAddressSelectType CEDContactorServiceOperator::CommunicationEnumMapper( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aCommTypeSelector) + { + LOGSTRING("CEDContactorServiceOperator::CommunicationEnumMapper"); + + TAiwCommAddressSelectType type; + + switch(aCommTypeSelector) + { + case VPbkFieldTypeSelectorFactory::EEmptySelector: + type = EAiwCommEmpty; + break; + + case VPbkFieldTypeSelectorFactory::EVoiceCallSelector: + type = EAiwCommVoiceCall; + break; + + case VPbkFieldTypeSelectorFactory::EUniEditorSelector: + type = EAiwCommUniEditor; + break; + + case VPbkFieldTypeSelectorFactory::EEmailEditorSelector: + type = EAiwCommEmailEditor; + break; + + case VPbkFieldTypeSelectorFactory::EInstantMessagingSelector: + type = EAiwCommInstantMessaging; + break; + + case VPbkFieldTypeSelectorFactory::EVOIPCallSelector: + type = EAiwCommVOIPCall; + break; + + case VPbkFieldTypeSelectorFactory::EVideoCallSelector: + type = EAiwCommVideoCall; + break; + + default: + LOGSTRING("CEDContactorServiceOperator::CommunicationEnumMapper: default -> Empty mapped."); + type = EAiwCommEmpty; + break; + } + + LOGSTRING("CEDContactorServiceOperator::CommunicationEnumMapper: Done."); + + return type; + } + +// End of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edcontactorunieditoroperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edcontactorunieditoroperation.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,85 @@ +/* +* 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: Implementation of unieditor (SMS/MMS) operation +* +*/ + + +// INCLUDE FILES +#include "edcontactorheaders.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CEDContactorUniEditorOperation::CEDContactorUniEditorOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorUniEditorOperation::CEDContactorUniEditorOperation(const TDesC& aParam, const TDesC& aName) : + CEDContactorOperation(aParam, aName) + { + // No implementation required + } + +// ----------------------------------------------------------------------------- +// CEDContactorUniEditorOperation::~CEDContactorUniEditorOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorUniEditorOperation::~CEDContactorUniEditorOperation() + { + } + +// ----------------------------------------------------------------------------- +// CEDContactorUniEditorOperation::NewLC() +// ----------------------------------------------------------------------------- +// +CEDContactorUniEditorOperation* CEDContactorUniEditorOperation::NewLC(const TDesC& aParam, const TDesC& aName) + { + CEDContactorUniEditorOperation* self = new (ELeave)CEDContactorUniEditorOperation(aParam, aName); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorUniEditorOperation::NewL() +// ----------------------------------------------------------------------------- +// +CEDContactorUniEditorOperation* CEDContactorUniEditorOperation::NewL(const TDesC& aParam, const TDesC& aName) + { + CEDContactorUniEditorOperation* self = + CEDContactorUniEditorOperation::NewLC( aParam, aName ); + CleanupStack::Pop(); // self; + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorUniEditorOperation::ConstructL() +// ----------------------------------------------------------------------------- +// +void CEDContactorUniEditorOperation::ConstructL() + { + + } + +// ----------------------------------------------------------------------------- +// CEDContactorUniEditorOperation::ExecuteLD() +// ----------------------------------------------------------------------------- +// +void CEDContactorUniEditorOperation::ExecuteLD() + { + CleanupStack::PushL(this); + CEDMsgEditors::ExecuteL( KSenduiMtmUniMessageUid, iParam, iName ); + CleanupStack::PopAndDestroy(this); + } +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edcontactorvideocalloperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edcontactorvideocalloperation.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,84 @@ +/* +* 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: Implementation of the video call operation +* +*/ + + +// INCLUDE FILES +#include "edcontactorheaders.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CEDContactorVideocallOperation::CEDContactorVideocallOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorVideocallOperation::CEDContactorVideocallOperation(const TDesC& aParam) : CEDContactorOperation(aParam) + { + // No implementation required + } + +// ----------------------------------------------------------------------------- +// CEDContactorVideocallOperation::~CEDContactorVideocallOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorVideocallOperation::~CEDContactorVideocallOperation() + { + } + +// ----------------------------------------------------------------------------- +// CEDContactorVideocallOperation::NewLC() +// ----------------------------------------------------------------------------- +// +CEDContactorVideocallOperation* CEDContactorVideocallOperation::NewLC(const TDesC& aParam) + { + CEDContactorVideocallOperation* self = new (ELeave)CEDContactorVideocallOperation(aParam); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorVideocallOperation::NewL() +// ----------------------------------------------------------------------------- +// +CEDContactorVideocallOperation* CEDContactorVideocallOperation::NewL(const TDesC& aParam) + { + CEDContactorVideocallOperation* self= + CEDContactorVideocallOperation::NewLC(aParam); + CleanupStack::Pop(); // self; + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorVideocallOperation::ConstructL() +// ----------------------------------------------------------------------------- +// +void CEDContactorVideocallOperation::ConstructL() + { + + } + +// ----------------------------------------------------------------------------- +// CEDContactorVideocallOperation::ExecuteLD() +// ----------------------------------------------------------------------------- +// +void CEDContactorVideocallOperation::ExecuteLD() + { + CleanupStack::PushL(this); + CEDPhoneCall::ExecuteL(iParam, CEDPhoneCall::ECCACallTypeVideo, ETrue ); + CleanupStack::PopAndDestroy(this); + } +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edcontactorvoipoperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edcontactorvoipoperation.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,84 @@ +/* +* 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: Implementation of the voip operation +* +*/ + + +// INCLUDE FILES +#include "edcontactorheaders.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CEDContactorVOIPOperation::CEDContactorVOIPOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorVOIPOperation::CEDContactorVOIPOperation(const TDesC& aParam, TUint32 aServiceId) : CEDContactorOperation(aParam), iServiceId(aServiceId) + { + // No implementation required + } + +// ----------------------------------------------------------------------------- +// CEDContactorVOIPOperation::~CEDContactorVOIPOperation() +// ----------------------------------------------------------------------------- +// +CEDContactorVOIPOperation::~CEDContactorVOIPOperation() + { + } + +// ----------------------------------------------------------------------------- +// CEDContactorVOIPOperation::NewLC() +// ----------------------------------------------------------------------------- +// +CEDContactorVOIPOperation* CEDContactorVOIPOperation::NewLC(const TDesC& aParam, TUint32 aServiceId) + { + CEDContactorVOIPOperation* self = new (ELeave)CEDContactorVOIPOperation(aParam, aServiceId); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorVOIPOperation::NewL() +// ----------------------------------------------------------------------------- +// +CEDContactorVOIPOperation* CEDContactorVOIPOperation::NewL(const TDesC& aParam, TUint32 aServiceId) + { + CEDContactorVOIPOperation* self=CEDContactorVOIPOperation::NewLC(aParam, aServiceId); + CleanupStack::Pop(); // self; + return self; + } + +// ----------------------------------------------------------------------------- +// CEDContactorVOIPOperation::ConstructL() +// ----------------------------------------------------------------------------- +// +void CEDContactorVOIPOperation::ConstructL() + { + + } + +// ----------------------------------------------------------------------------- +// CEDContactorVOIPOperation::ExecuteLD() +// ----------------------------------------------------------------------------- +// +void CEDContactorVOIPOperation::ExecuteLD() + { + CleanupStack::PushL(this); + CEDPhoneCall::ExecuteL(iParam, CEDPhoneCall::ECCACallTypeVoIP, EFalse, + iServiceId); + CleanupStack::PopAndDestroy(this); + } +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edmsgeditors.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edmsgeditors.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,144 @@ +/* +* 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: Launching Editors. +* +*/ + + +// INCLUDE FILES +#include "edcontactorheaders.h" +#include + +#ifndef KSenduiMtmOnlineAlbumUidValue +#define KSenduiMtmOnlineAlbumUidValue 0x200009D5 +#endif + +/// Unnamed namespace for local definitions +namespace + { + +#ifdef _DEBUG + enum TPanicCode + { + EPanicPreCond_ExecuteL = 1 + }; + + void Panic(TPanicCode aReason) + { + _LIT(KPanicText, "CCmsMsgEditors"); + User::Panic (KPanicText, aReason); + } +#endif // _DEBUG + + + } /// namespace + + +// ============================ MEMBER FUNCTIONS =============================== + +// --------------------------------------------------------- +// CEDMsgEditors::ExecuteL +// --------------------------------------------------------- +void CEDMsgEditors::ExecuteL( const TUid aServiceUid, + const TDesC& aAddress, const TDesC& aName ) + { + __ASSERT_DEBUG (NULL != &aAddress && 0 < aAddress.Size() && + NULL != &aName && 0 < aName.Size() && + NULL != &aServiceUid, Panic (EPanicPreCond_ExecuteL)); + + //ParsePhoneNumber may only short length of phonenumber, + //so it's safe to use same lenght as given number and do the copy. + HBufC* numBuf = aAddress.AllocLC(); + TPtr numDesc( numBuf->Des() ); + + //Unieditor could also use email adresses. If parser returns EFalse, do not care. + if ( KSenduiMtmUniMessageUid == aServiceUid) + { + CommonPhoneParser::ParsePhoneNumber( numDesc, + CommonPhoneParser::EPhoneClientNumber ); + } + + CSendUi* sendui = CSendUi::NewLC (); + CMessageData* msgdata = CMessageData::NewLC (); + msgdata->AppendToAddressL( *numBuf, aName); + + if (KSenduiMtmSmtpUid == aServiceUid) + { + const TUid KMfEUidValue = { 0x1020695B }; //Where is this defined? + TBool mailAvailabe = EFalse; + TBool mfeAvailable = EFalse; + TUid selectedServiceID = KNullUid; + RPointerArray availableServices; + sendui->AvailableServicesL(availableServices, KGenericMtmPlugin); + for (TInt i=0; i < availableServices.Count(); i++) + { + if (!(availableServices[i]->ServiceFeatures() & CSendingServiceInfo::EServiceInValid)) + { + if (availableServices[i]->ServiceId() == KSenduiMtmSmtpUid) + { + mailAvailabe = ETrue; + } + else if (availableServices[i]->ServiceId() == KMfEUidValue) + { + selectedServiceID = availableServices[i]->ServiceId(); + mfeAvailable = ETrue; + } + } + } + availableServices.ResetAndDestroy(); + + if (mailAvailabe && mfeAvailable) + { + CArrayFixFlat* servicesToDim = new (ELeave) CArrayFixFlat(1); + CleanupStack::PushL(servicesToDim); + + servicesToDim->AppendL(KSenduiTechnologySmsUid); + servicesToDim->AppendL(KSenduiTechnologyMmsUid); + //servicesToDim->AppendL(KSenduiTechnologyMailUid); Email is not to be dimmed + servicesToDim->AppendL(KSenduiTechnologyUniEditorUid); + servicesToDim->AppendL(KSenduiTechnologyIrUid); + servicesToDim->AppendL(KSenduiTechnologyBtUid); + servicesToDim->AppendL(KSenduiTechnologyIMUid); + servicesToDim->AppendL(KMmsDirectUpload); + servicesToDim->AppendL(KMmsIndirectUpload); + servicesToDim->AppendL(KMmsUploadService1Id); + servicesToDim->AppendL(KMmsUploadService2Id); + servicesToDim->AppendL(KMmsUploadService3Id); + servicesToDim->AppendL(KMmsUploadService4Id); + const TUid KShareOnline = { KSenduiMtmOnlineAlbumUidValue }; // From SendUiInternalConsts.h + servicesToDim->AppendL(KShareOnline); + + sendui->ShowQueryAndSendL(msgdata, KCapabilitiesForAllServices, servicesToDim); + servicesToDim->Reset(); + CleanupStack::PopAndDestroy(servicesToDim); + } + else if (mfeAvailable) + { + sendui->CreateAndSendMessageL(selectedServiceID, msgdata, KNullUid, EFalse); + } + else + { + sendui->CreateAndSendMessageL(aServiceUid, msgdata, KNullUid, EFalse); + } + } + else + { + sendui->CreateAndSendMessageL(aServiceUid, msgdata, KNullUid, EFalse); + } + + CleanupStack::PopAndDestroy( 3, numBuf ); //msgdata, sendui + + return; + } +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/edcontactor/src/edphonecall.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/edcontactor/src/edphonecall.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,144 @@ +/* +* 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: Launching Call. +* +*/ + + +// INCLUDE FILES +#include "edcontactorheaders.h" + +_LIT8( KAiwContentTypeAll, "*" ); + +/// Unnamed namespace for local definitions +namespace + { + +#ifdef _DEBUG + enum TPanicCode + { + EPanicPreCond_ExecuteL = 1, + EPanicPreCond_ExecuteL2 + }; + + void Panic(TPanicCode aReason) + { + _LIT(KPanicText, "CCmsPhoneCall"); + User::Panic (KPanicText, aReason); + } +#endif // _DEBUG + + + } /// namespace + +// ============================ MEMBER FUNCTIONS =============================== + +// --------------------------------------------------------- +// CEDPhoneCall::ExecuteL +// --------------------------------------------------------- +void CEDPhoneCall::ExecuteL( const TDesC& aPhoneNumber, TEDPhoneCallType aCallType, + TBool aForcedCallType, TUint32 aServiceId ) + { + __ASSERT_DEBUG( NULL != &aPhoneNumber && 0 < aPhoneNumber.Size(), Panic(EPanicPreCond_ExecuteL) ); + +#ifdef _DEBUG + HBufC8* buf = HBufC8::NewLC( aPhoneNumber.Length() ); + buf->Des().Copy( aPhoneNumber ); + TPtrC8 numberDesc( buf->Des() ); + CleanupStack::PopAndDestroy( buf ); +#endif + + //aPhoneNumber will be an xsp id of format "ServiceName:UserId" + //here we need to truncate the servicename and pass only the UserId + + //Find if aPhoneNumber of type "ServiceName:UserId" + //if true, then remove the service part + TPtrC phoneNum( aPhoneNumber ); + TInt phoneNumberStart = phoneNum.Locate(':'); + + if ( KErrNotFound != phoneNumberStart ) + { + phoneNumberStart++; //To get rid of ':' + phoneNum.Set( phoneNum.Mid( phoneNumberStart ) ); + } + + HBufC* numBuf = phoneNum.AllocLC(); + TPtr numDesc( numBuf->Des() ); + CommonPhoneParser::ParsePhoneNumber( numDesc, + CommonPhoneParser::EPhoneClientNumber ); + + CAiwDialDataExt* dialDataExt = CAiwDialDataExt::NewLC(); + dialDataExt->SetPhoneNumberL( *numBuf ); + switch (aCallType) + { + case ECCACallTypeVoice: + if ( aForcedCallType ) + { + // Use this with Action menu's Voice call icon + dialDataExt->SetCallType( CAiwDialData::EAIWForcedCS ); + } + else + { + // To be on the safe side, use this with Send key and big Call icon + dialDataExt->SetCallType( CAiwDialData::EAIWVoice ); + } + break; + case ECCACallTypeVoIP: + dialDataExt->SetServiceId( aServiceId ); + dialDataExt->SetCallType( CAiwDialData::EAIWVoiP ); + break; + case ECCACallTypeVideo: + dialDataExt->SetCallType( CAiwDialData::EAIWForcedVideo ); + break; + default: + dialDataExt->SetCallType( CAiwDialData::EAIWForcedCS ); + break; + } + + dialDataExt->SetWindowGroup( CCoeEnv::Static()->RootWin().Identifier() ); + + DoAIWCallL( *dialDataExt ); + + CleanupStack::PopAndDestroy( dialDataExt ); + CleanupStack::PopAndDestroy( numBuf ); + } + +// --------------------------------------------------------- +// CEDPhoneCall::DoAIWCallL +// --------------------------------------------------------- +void CEDPhoneCall::DoAIWCallL( CAiwDialDataExt& aDialData ) + { + RCriteriaArray interest; + CleanupClosePushL( interest ); + CAiwCriteriaItem* criteria = CAiwCriteriaItem::NewLC( KAiwCmdCall, + KAiwCmdCall, KAiwContentTypeAll ); + criteria->SetServiceClass( TUid::Uid(KAiwClassBase) ); + User::LeaveIfError( interest.Append( criteria ) ); + + CAiwServiceHandler* serviceHandler = CAiwServiceHandler::NewLC(); + serviceHandler->AttachL( interest ); + + CAiwGenericParamList& paramList = serviceHandler->InParamListL(); + aDialData.FillInParamListL( paramList ); + + serviceHandler->ExecuteServiceCmdL( KAiwCmdCall, paramList, + serviceHandler->OutParamListL(), 0, NULL ); + serviceHandler->DetachL( interest ); + + CleanupStack::PopAndDestroy( serviceHandler ); + CleanupStack::PopAndDestroy( criteria ); + CleanupStack::PopAndDestroy( &interest ); + } + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/group/bld.inf Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,54 @@ +/* +* 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: Build info file +* +*/ + +#include + +#include "../edcontactor/group/bld.inf" + + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../rom/easydialingplugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(easydialingplugin.iby) +../rom/easydialingpluginresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(easydialingpluginresources.iby) + + +../conf/easydialing.confml APP_LAYER_CONFML(easydialing.confml) +../conf/easydialing_200212A0.crml APP_LAYER_CRML(easydialing_200212A0.crml) +../cenrep/200212A0.txt /epoc32/data/z/private/10202be9/200212A0.txt +../cenrep/200212A0.txt /epoc32/release/winscw/udeb/z/private/10202be9/200212A0.txt + +../inc/dialingextensioninterface.h |../../../inc/dialingextensioninterface.h +../inc/easydialingcommands.hrh |../../../inc/easydialingcommands.hrh +../inc/easydialingcrkeys.h APP_LAYER_PLATFORM_EXPORT_PATH(easydialingcrkeys.h) + +../loc/easydialing.loc APP_LAYER_LOC_EXPORT_PATH(easydialing.loc) + +../data/easydialing_stub.sis /epoc32/data/z/system/install/easydialing_stub.sis + + +PRJ_EXTENSIONS +START EXTENSION s60/mifconv + OPTION TARGETFILE easydialing.mif + OPTION HEADERFILE easydialing.mbg + OPTION SOURCEFILE iconlist.txt +END + +PRJ_MMPFILES +easydialingplugin.mmp + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/group/easydialingplugin.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/group/easydialingplugin.mmp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,132 @@ +/* +* 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: Project config file +* +*/ + +#include +#include "data_caging_paths.hrh" +#include "../inc/easydialingconstants.hrh" + +TARGET easydialingplugin.dll +CAPABILITY CAP_ECOM_PLUGIN + +TARGETTYPE PLUGIN +UID 0x10009D8D 0x200212A0 // EASYDIALING_PLUGIN_DLL_UID (Uncommented because of OST) +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE dllmain.cpp +SOURCE easydialingplugin.cpp +SOURCE easydialinglistbox.cpp +SOURCE easydialinglistboxdata.cpp +SOURCE easydialinglistboxitemdrawer.cpp +SOURCE easydialinglistboxview.cpp +SOURCE easydialingcenreplistener.cpp +SOURCE easydialingcontactdata.cpp +SOURCE easydialingcontactdatamanager.cpp +SOURCE easydialingutils.cpp + +USERINCLUDE ../inc +USERINCLUDE ../edcontactor/inc +USERINCLUDE ../traces + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/internal +SYSTEMINCLUDE /epoc32/include/ecom + +SOURCEPATH ../data + +START RESOURCE 200212A0.rss + LANG SC + TARGET easydialingplugin.rsc +END + +START RESOURCE easydialingpluginresources.rss + HEADER + TARGETPATH /resource + TARGET easydialingpluginresources.rsc + LANGUAGE_IDS +END + + +// Symbian framework libraries + +LIBRARY euser.lib +LIBRARY ECom.lib +LIBRARY cone.lib +LIBRARY avkon.lib +LIBRARY eikcore.lib +LIBRARY eikctl.lib +LIBRARY eikcoctl.lib +LIBRARY bafl.lib +LIBRARY gdi.lib +LIBRARY egul.lib +LIBRARY efsrv.lib +LIBRARY ws32.lib +LIBRARY fbscli.lib +LIBRARY bitgdi.lib +LIBRARY etext.lib + +// Avkon, Avkon skin and Avkon layout libraries. +LIBRARY aknicon.lib +LIBRARY aknlistloadertfx.lib +LIBRARY aknskins.lib +LIBRARY aknskinsrv.lib +LIBRARY aknswallpaperutils.lib +LIBRARY aknlayout2scalable.lib +LIBRARY cdlengine.lib +LIBRARY aknlayout2.lib + +// AIW library +LIBRARY servicehandler.lib + +// Predictive search libraries +LIBRARY PcsUtils.lib +LIBRARY PsServerClientAPI.lib + +// Virtual phonebook library +LIBRARY VPbkEng.lib + +// Phonebook engine +LIBRARY pbkeng.lib + +// ECE Communication launcher library +LIBRARY ccaclient.lib + +// Central repository +LIBRARY centralrepository.lib +LIBRARY commonengine.lib +LIBRARY cenrepnotifhandler.lib + +// CPbk2ImageManager +LIBRARY pbk2presentation.lib + +// bitmap handling +LIBRARY bitmaptransforms.lib + +// Easy dialing own contactor module. +LIBRARY edcontactor.lib + +// Service provider settings api +LIBRARY serviceprovidersettings.lib + +// CMS library used for getting information about contacts. +//LIBRARY cmsclient.lib + +// Libraries used for R&D purposes only +DEBUGLIBRARY flogger.lib + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/group/iconlist.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/group/iconlist.txt Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,3 @@ +-c8,8 qgn_indi_org_arrow_right.svg +-c8,8 qgn_indi_org_arrow_left.svg +-c8,8 qgn_indi_org_arrow_down.svg \ No newline at end of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/dialingextensioninterface.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/dialingextensioninterface.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,228 @@ +/* +* 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: Ecom interface header +* +*/ + +#ifndef __CDIALEREXTENSIONINTERFACE_H +#define __CDIALEREXTENSIONINTERFACE_H + +#include + +#include +#include +#include + + +/** UID of dialing extension ECom interface. */ +const TUid KEasyDialingPluginInterfaceUID = { 0x200212A1 }; + +/** UID of easy dialing plugin. */ +const TUid KEasyDialingPluginImplementationUID = { 0x200212A0 }; + +/** + * Observer class for easy dialing. + */ +class MDialingExtensionObserver + { +public: + + /** + * Identifiers for easy dialing events. + */ + typedef enum TEvent_enum + { + + /** Contact search has completed. */ + ESearchComplete = 1, + + /** Easy dialing has gained or given up the focus. */ + EFocusChanged, + + /** Easy dialing has started communication launcher (a.k.a. contact view) */ + ECCALauncherStarted, + + /** Communication launcher a.k.a. contact view has been close. */ + ECCALauncherExit, + + /** Easy dialing feature has been switched on. */ + EEasyDialingEnabled, + + /** Easy dialing feature has been switched off. */ + EEasyDialingDisabled, + + /** User has started communication (SMS, IM, E-mail ...). Not used for phone calls. */ + ECommunicationStarted, + + /** User has cancelled communication once started. */ + ECommunicationCancelled + + } TEvent; + + + /** + * Handles event from easy dialing plugin. + * + * @param aEvent Event id. + * + */ + virtual void HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent ) = 0; + }; + + + + +/** + * Easy dialing plugin class. + */ + +class CDialingExtensionInterface : public CCoeControl + { +public: + + /** + * Creates an instance of plugin. + */ + static CDialingExtensionInterface* NewL(); + + + /** + * Destructor. + */ + virtual ~CDialingExtensionInterface(); + + + /** + * Does the rest of the initialization of the plugin. + * Must be called after NewL before using any other + * functions of the plugin. + * + * @param aParent Parent container of the plugin. + */ + virtual void InitializeL( CCoeControl& aParent ) = 0; + + + /** + * Resets the previous search results. + */ + virtual void Reset() = 0; + + + /** + * Adds an observer to the plugin. + * + * @param aObserver Observer to be added. + */ + virtual void AddObserverL( MDialingExtensionObserver* aObserver ) = 0; + + + /** + * Removes an observer from the plugin. + * + * @param aObserver Observer to be removed. + */ + virtual void RemoveObserver( MDialingExtensionObserver* aObserver ) = 0; + + + /** + * Sets input string (search string) to plugin. + * + * @param aDesC Input string descriptor. + */ + virtual void SetInputL( const TDesC& aDesC ) = 0; + + + /** + * Gets the resource id of plugin's control button area resource. + * + * @return Resource id. + */ + virtual TInt CbaResourceId( ) = 0; + + + /** + * Gets the resource id of plugin's menu bar resource. + * + * @return Resource id. + */ + virtual TInt MenuResourceId() = 0; + + + /** + * Gets the resource id of plugin's menu bar resource. + * + * @param aMenuPane Menu pane + * @param aMenuResourceId Menu bar resource id. + * @return Resource id. + */ + virtual TBool InitializeMenuPaneL( CEikMenuPane& aMenuPane, TInt aMenuResourceId ) = 0; + + + /** + * Gets the resource id of plugin's menu bar resource. + * + * @param aCommand Command id. + * @return ETrue if command was handled, EFalse otherwise. + */ + virtual TBool HandleCommandL( TInt aCommand ) = 0; + + + /** + * Tells if extension is currently enabled from settings. + * @return ETrue if extension is enabled, EFalse otherwise. + */ + virtual TBool IsEnabled() = 0; + +private: // data + + /** ECom instance identifier key. */ + TUid iDestructorIDKey; + }; + + + +// INLINE FUNCTIONS + +// ----------------------------------------------------------------------------- +// CDialingExtensionInterface::NewL +// +// ----------------------------------------------------------------------------- +// +inline CDialingExtensionInterface* CDialingExtensionInterface::NewL() + { + // TEComResolverParams resolverParams; // data passed to the plugin + // resolverParams.SetDataType(); // no data yet + + TAny* ptr = REComSession::CreateImplementationL( KEasyDialingPluginImplementationUID, + _FOFF( CDialingExtensionInterface, iDestructorIDKey ) + // resolverParams + ); + + return STATIC_CAST( CDialingExtensionInterface*, ptr ); + } + + +// ----------------------------------------------------------------------------- +// CDialingExtensionInterface::~CDialingExtensionInterface() +// +// ----------------------------------------------------------------------------- +// +inline CDialingExtensionInterface::~CDialingExtensionInterface() + { + REComSession::DestroyedImplementation( iDestructorIDKey ); + } + +#endif //__CDIALEREXTENSIONINTERFACE_H + +// End of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialingcenreplistener.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialingcenreplistener.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,107 @@ +/* +* 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: Grid for easy dialing action menu. +* +*/ + + +#ifndef __EASYDIALINGCENREPLISTENER_H__ +#define __EASYDIALINGCENREPLISTENER_H__ + +// INCLUDES +#include +#include // link against commonengine.lib + +// FORWARD DECLARATIONS +class CRepository; +class CenRepNotifyHandler; +class MEasyDialingCenrepListenerObserver; + +// CLASS DECLARATION + +/** +* Central Repository event monitor +*/ +class CEasyDialingCenrepListener + : public CBase, public MCenRepNotifyHandlerCallback +{ + public: // Constructors and destructor + + /** + * Static constructor. Construct a CEasyDialingCenrepListener + * using two phase construction, and return a pointer to the created object. + * @param aObserver Pointer to observer. + * @return Created object. + */ + static CEasyDialingCenrepListener* NewL(MEasyDialingCenrepListenerObserver* aObserver); + + /** + * Destructor. Destroy the object and release all memory objects + */ + virtual ~CEasyDialingCenrepListener(); + + public: + + /** + * Gets the easydialing on/off cenrep key value + * @return The key value + */ + TInt Value(); + + /** + * Sets the easydialing on/off cenrep key value + * @param aValue Value to be set. + */ + void SetEasyDialingSettingsValue( const TInt aValue ); + + /** + * Handles cenrep notifications. + * @param Id of the changed key. + */ + void HandleNotifyGeneric( TUint32 aId ); + + private: + + /** + * Perform the first phase of two phase construction + * @param aObserver Pointer to observer + */ + CEasyDialingCenrepListener(MEasyDialingCenrepListenerObserver* aObserver); + + /** + * Second phase constructor + */ + void ConstructL(); + + private: + + /** The central repository handle. Owned. */ + CRepository* iClient; + + /** Observer to this class. Not owned. */ + MEasyDialingCenrepListenerObserver* iObserver; + + /** The cenrep value for easydialing setting. */ + TInt iEasyDialingSettingValue; + + /** The cenrep value for contact thumbnail setting (shown / not shown). */ + TInt iContactThumbnailsSettingsValue; + + /** Cenrep notify handler. Owned. */ + CCenRepNotifyHandler* iNotifyHandler; +}; + +#endif // __EASYDIALINGCENREPLISTENER_H__ + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialingcommands.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialingcommands.hrh Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,45 @@ +/* +* 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: Easy dialing command ids. +* +*/ + +#ifndef __EASYDIALINGCOMMANDS_HRH__ +#define __EASYDIALINGCOMMANDS_HRH__ + +/* + * Easy dialing commands live in the same id space with several other + * enumerations. It's range is chosen so that it does not conflict these + * others. + * + * The other enumerations are: + * - phoneviewcommanddefinitions from 1 to currently ~200 + * - phoneappcommands id space from 6000 upwards + */ + + +enum + { + EEasyDialingVoiceCall = 400, + EEasyDialingVideoCall, + EEasyDialingSendMessage, + EEasyDialingOpenContact, + EEasyDialingCallHandlingActivated, + EEasyDialingEnterKeyAction, + EEasyDialingOn, + EEasyDialingOff, + EEasyDialingClosePopup + }; + +#endif //__EASYDIALINGCOMMANDS_HRH__ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialingconstants.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialingconstants.hrh Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,39 @@ +/* +* 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: Easy dialing constant definitions. +* +*/ + +#ifndef __EASYDIALINGCONSTANTS_HRH__ +#define __EASYDIALINGCONSTANTS_HRH__ + +/** + * Dll uid for plugin. + */ +#define EASYDIALING_PLUGIN_DLL_UID 0x200212A0 + +/** + * Ecom interface uid plugin + */ +#define EASYDIALING_PLUGIN_IF_UID 0x200212A1 + +/** + * Ecom implementation uid plugin. Same as DLL UID. + */ +#define EASYDIALING_PLUGIN_ECOM_IMPL_UID 0x200212A0 + +#endif //__EASYDIALINGCONSTANTS_HRH__ + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialingcontactdata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialingcontactdata.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,159 @@ +/* +* 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: Easy dialing contact data manager. +* +*/ + + +#ifndef __EASYDIALINGCONTACTDATA_H__ +#define __EASYDIALINGCONTACTDATA_H__ + +class CFbsBitmap; +class MVPbkContactLink; + +/** + * Container for easy dialing contact data for one contact. + */ +class CEasyDialingContactData : public CBase + { +public: + + /** + * Constructor. + */ + CEasyDialingContactData(MVPbkContactLink* aContactLink); + + /** + * Destructor. + */ + ~CEasyDialingContactData(); + + + /** + * Gets a pointer to contact link. + * @return Pointer to contact link object. + */ + MVPbkContactLink* ContactLink(); + + + /** + * Get's contact's thumbnail bitmap. + * @return Pointer to bitmap object. + */ + CFbsBitmap* Thumbnail(); + + + /** + * Setting function for contact thumbnail. + * @param aThumnail Thumbnail to set. + */ + void SetThumbnail(CFbsBitmap* aThumbnail); + + + /** + * Get favourite status of the contact. + * @return ETrue, if contact is a favourite, EFalse otherwise. + */ + TBool Fav(); + + + /** + * Sets favourite status of the contact. + * @param aFav Boolean value containing the status. + */ + void SetFav(TBool aFav); + + + /** + * Returns the loading status of the contact. + * @return ETrue, if contact data loading has completed, EFalse otherwise. + */ + TBool IsLoaded(); + + + /** + * Sets loading status to complete. + */ + void LoadingComplete(); + + + /** + * Deletes the thumbnail image of the contact. + */ + void DeleteThumbnail(); + + + /** + * Return ETrue if voice call is available. + */ + TBool VoiceCallAvailable(); + + + /** + * Sets voice call availability status. + * @param aVailable Availability of voice call. + */ + void SetVoiceCallAvailable( TBool aVailable ); + + + /** + * Return ETrue if video call is available. + */ + TBool VideoCallAvailable(); + + + /** + * Sets video call availability status. + * @param aVailable Availability of video call. + */ + void SetVideoCallAvailable( TBool aVailable ); + + + /** + * Return ETrue if uni-editor (SMS, MMS, e-mail) is available. + */ + TBool UniEditorAvailable(); + + + /** + * Sets uni-editor availability status. + * @param aVailable Availability of uni-editor. + */ + void SetUniEditorAvailable( TBool aVailable ); + +private: + + /** Contact link. Owned. */ + MVPbkContactLink* iContactLink; + + /** Thumbnail bitmap. Owned. */ + CFbsBitmap* iThumbnail; + + /** ETrue if this is a favourite contact. */ + TBool iFav; + + /** ETrue is asynchronous loading of contact data is complete. */ + TBool iLoaded; + + /** ETrue if voice call is a possible action with this contact. */ + TBool iVoiceCallAvailable; + + /** ETrue if video call is a possible action with this contact. */ + TBool iVideoCallAvailable; + + /** ETrue if SMS or MMS is a possible action with this contact. */ + TBool iUniEditorAvailable; + }; + +#endif //__EASYDIALINGCONTACTDATA_H__ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialingcontactdatamanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialingcontactdatamanager.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,322 @@ +/* +* 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: Easy dialing contact data manager. +* +*/ + + +#ifndef __EASYDIALINGCONTACTDATAMANAGER_H__ +#define __EASYDIALINGCONTACTDATAMANAGER_H__ + +#include +#include +#include +#include +#include +#include // for TPbkNameOrder +#include +#include "easydialingcontactdata.h" + +// FORWARD DECLARATIONS +class CVPbkContactManager; +class MContactDataManagerObserver; +class MVPbkFieldType; +class CPbk2ImageManager; +class CVPbkTopContactManager; +class CRepository; + +/** + * CEasyDialingContactDataManager + * Handles the loading and storing of thumbnail bitmaps + */ +class CEasyDialingContactDataManager : + public CBase, + public MPbk2ImageGetObserver, + public MVPbkSingleContactOperationObserver, + public MVPbkContactStoreObserver, + public MVPbkOperationErrorObserver, + public MVPbkOperationResultObserver + + { +public: + + + /** + * Constructor. + */ + CEasyDialingContactDataManager(CVPbkContactManager* aContactManager); + + + /** + * Destructor. + */ + ~CEasyDialingContactDataManager(); + + + /** + * Second phase constructor of the class. + */ + void ConstructL(); + + /** + * Sets the observer. Observer is notified when thumbnail loading is complete + * @param aObserver + */ + void SetObserver(MContactDataManagerObserver* aObserver); + + /** + * Sets the size of the thumbnails. If the loaded thumbnail is larger than + * the set size, thumnail is scaled to the size. If the set size is different + * from the old one, deletes all loaded thumbnails, which causes them to be + * reloaded when they are needed the next time. + * @param aSize The size of the thumbnails + */ + void SetThumbnailSize(const TSize& aSize); + + /** + * Gets an id string for the thumbnail, if thumbnail exists for the contact. + * Used when the listbox items are created. + * @param aContact Contact link + * @param aMatchThumbnail If true, tries to match the link to the existing thumbnails + * @param aFav Is this contact a favourite + * @return id string. caller needs to delete this. + */ + HBufC* GetThumbnailIdL( MVPbkContactLink* aContact, TBool aMatchThumbnail, TBool aFav ); + + /** + * Gets the thumbnail for a contact item. If thumbnail is not loaded, starts + * loading it. + * @param aContact Contact link + * @param aThumbnail Outparam. Contact thumbnail. NULL if contact doesn't have thumbnail + * @param aFav Outparam. Favourite status + * @return true if contact data has been loaded + */ + TBool GetThumbnailAndFav(const TDesC& aId, CFbsBitmap*& aThumbnail, TBool& aFav); + + /** + * Deletes all loaded thumbnails and cancel asynchronous operations. + */ + void Reset(); + + /** + * Returs ETrue if voice call is available for current contact. + */ + TBool VoiceCallAvailable( TInt aIndex ); + + + /** + * Returs ETrue if video call is available for current contact. + */ + TBool VideoCallAvailable( TInt aIndex ); + + + /** + * Returs ETrue if uni-editor is available for current contact. + */ + TBool UniEditorAvailable( TInt aIndex ); + + + /** + * Returns HBufC8 descriptor containing MVPbkContactLink + * link packaged. + */ + HBufC8* ContactLinkLC( TInt aIndex ); + + + /** + * Sets the iContactThumbnailSetting member variable to either true or false + * which is read and if it is false then thumbnails are not shown + * @param aContactThumbnailSetting which is cenrep value for ContactThumbnailSetting + */ + void SetContactThumbnailSetting( TInt aContactThumbnailSetting ); + + /** + * Gets the iContactThumbnailSetting member variable to either true or false + * which is read and if it is false then thumbnails are not shown + * returns iContactThumbnailSetting which is cenrep value for ContactThumbnailSetting + */ + TBool GetContactThumbnailSetting( ); + + + /** + * Flushes the asynchronous contact data of all contacts. + */ + void Reload(); + + /** + * Checks if contact link is a favourite. This is meant to be used for contacts that + * don't yet have contact data item. Since this needs to go through all the favourites, + * unnecessary calls should be avoided. + */ + TBool IsFavL( MVPbkContactLink* aLink ); + + /** + * @return the number of favourites in contact db + */ + TInt NumberOfFavsL(); + + /** + * Creates contact link to a favourite contact. + * @param aIndex Index of the favourite in favourites view + * @return the newly created link (added to cleanupstack) + */ + MVPbkContactLink* FavLinkLC( TInt aIndex ); + + /** + * Creates contact string for favourite contact. This string can be used directly + * in the contact listbox. F.ex. "Firstname Surname\tCompanyname". + * @param aIndex Index of the favourite in favourites view + * @param aNameOrder Name ordering to be used + * @return the newly created string (added to cleanupstack) + */ + HBufC* FavContactStringLC( TInt aIndex, CPbkContactEngine::TPbkNameOrder aNameOrder ); + +public: + + + /** + * From MPbk2ImageGetObserver. + */ + void Pbk2ImageGetComplete(MPbk2ImageOperation& aOperation, CFbsBitmap* aBitmap); + + + /** + * From MPbk2ImageGetObserver. + */ + void Pbk2ImageGetFailed(MPbk2ImageOperation& aOperation, TInt aError); + +private: + + + /** + * From MVPbkSingleContactOperationObserver. + */ + void VPbkSingleContactOperationComplete( + MVPbkContactOperationBase& aOperation, + MVPbkStoreContact* aContact ); + + + /** + * From MVPbkSingleContactOperationObserver. + */ + void VPbkSingleContactOperationFailed( + MVPbkContactOperationBase& aOperation, + TInt aError ); + +private: + + + /** + * From MVPbkContactStoreObserver. + */ + void StoreReady( MVPbkContactStore& aContactStore ); + + + /** + * From MVPbkContactStoreObserver. + */ + void StoreUnavailable( MVPbkContactStore& aContactStore, TInt aReason ); + + + /** + * From MVPbkContactStoreObserver. + */ + void HandleStoreEventL( MVPbkContactStore& aContactStore, + TVPbkContactStoreEvent aStoreEvent ); + +private: + /** + * From MVPbkOperationErrorObserver. + */ + void VPbkOperationFailed( + MVPbkContactOperationBase* aOperation, + TInt aError ); + +private: + /** + * From MVPbkOperationResultObserver. + */ + void VPbkOperationResultCompleted( + MVPbkContactOperationBase* aOperation, + MVPbkContactViewBase* aOperationResult ); + +private: + + void InitReady(); + + TInt FindContactIndex( MVPbkContactLink* aContact ); + + void LoadNextContactDataL(); + + void DoHandleImageGetCompleteL(CFbsBitmap* aBitmap, TInt aIndex); + + void HandleError(TInt aError); + + void DoHandleContactOperationCompleteL( MVPbkStoreContact* aContact, TInt aIndex); + + void GetAvailableServicesL( MVPbkStoreContact* aContact, TInt aIndex ); + + void InformObserver(); + +private: + /** Array that contains all loaded contact data. Owned. */ + RPointerArray iContactDataArray; + + /** Array that contains indexes of thumbnails that are waiting to be loaded. Owned. */ + RArray iWaitingContacts; + + /** Phonebook image manager. Owned. */ + CPbk2ImageManager* iImageManager; + + /** Parameters for image manager. Contains info about the size of thumbnails. */ + TPbk2ImageManagerParams iImageManagerParams; + + /** Field type. Not owned. */ + const MVPbkFieldType* iThumbnailFieldType; + + /** Image loading operation. Owned. */ + MPbk2ImageOperation* iImageOperation; + + /** Contact item for which a thumbnail is being loaded. Owned. */ + MVPbkStoreContact* iStoreContact; + + /** Virtual phonebook contact manager. Not owned. */ + CVPbkContactManager* iContactManager; + + /** Contact data manager observer. Not owned. */ + MContactDataManagerObserver* iObserver; + + /** Top (i.e. favourite) contacts manager. Owned. */ + CVPbkTopContactManager* iVPbkTopContactManager; + + /** Virtual phonebook operation handle. Owned. */ + MVPbkContactOperationBase* iContactOperation; + + /** Default contact store. Not owned. */ + MVPbkContactStore* iContactStore; + + /** Variable which tells either to show or hide contact thumbnails. */ + TBool iContactThumbnailSetting; + + /** ETrue if asynchronous opening of the contac store is ready. */ + TBool iStoreReady; + + /** View to vpbk containing all favourite contacts. Owned. */ + MVPbkContactViewBase* iFavsView; + + /** Virtual phonebook operation handle for getting favourites. Owned. */ + MVPbkContactOperationBase* iFavsOperation; + }; + +#endif //__EASYDIALINGTHUMBNAILMANAGER_H__ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialingcrkeys.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialingcrkeys.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,47 @@ +/* +* 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: Easy dialing central repository keys. +* +*/ + + +#ifndef __EASYDIALINGCRKEYS_H__ +#define __EASYDIALINGCRKEYS_H__ + +#include + +/** +* Easydialing settings CR UID (same as easydialing DLL uid) +*/ +const TUid KCRUidEasyDialSettings = {0x200212A0}; + +/** +* Easydialing on/off +* +* Possible values are: +* 0 = Easydialing is off +* 1 = Easydialing is on +*/ +const TUint32 KEasyDialing = 0x00000001; + +/** +* Easydialing Contact Thumbnails show/hide +* Possible values are: +* 0 = Thumbnails are hidden +* 1 = Thumbnails are shown +*/ +const TUint32 KEasyDialingContactThumbnails = 0x00000002; + +#endif //__EASYDIALINGCRKEYS_H__ + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialinglistbox.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialinglistbox.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,202 @@ +/* +* 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: Easy dialing listbox. +* +*/ + + +#ifndef _EASYDIALINGLISTBOX_H +#define _EASYDIALINGLISTBOX_H + +// INCLUDE FILES +#include "easydialinglistboxview.h" +#include "easydialinglistboxitemdrawer.h" +#include "easydialinglistboxdata.h" +#include +#include + +// CONSTANTS + +// Easy dialing specific listbox events +const TInt KEasyDialingContactSelected( 0x1001 ); +const TInt KEasyDialingContactLongTapped( 0x1002 ); + +// FORWARD DECLARATIONS + +class CEasyDialingListBoxItemDrawer; +class CAknsFrameBackgroundControlContext; +class CEasyDialingContactDataManager; +class CAknLongTapDetector; +class CAknPointerEventSuppressor; + +// CLASS DECLARATIONS + +/* + * ============================================================================== + * + * CEasyDialingListBox + * + * ============================================================================== + */ + +class CEasyDialingListBox : public CEikFormattedCellListBox, + public MAknLongTapDetectorCallBack + { +public: + + /** + * Constructor. + */ + CEasyDialingListBox(); + + /** + * Destructor. + */ + ~CEasyDialingListBox(); + + /** + * Second phase constructor. + * @param aFlags Listbox flags. + * @param aContactDataManager Pointer to contact data manager + */ + void ConstructL( TInt aFlags, + CEasyDialingContactDataManager* aContactDataManager ); + + /** + * From CEikFormattedCellListBox. + */ + virtual CListBoxView* MakeViewClassInstanceL(); + + /** + * From CEikFormattedCellListBox. + */ + CEasyDialingListBoxItemDrawer* ItemDrawer() const; + + /** + * From CEikFormattedCellListBox. + */ + void Draw(const TRect& aRect) const; + + /** + * From CEikFormattedCellListBox. + */ + void HandleResourceChange(TInt aType); + + /** + * From CCoeControl + */ + void MakeVisible(TBool aVisible); + + /** + * From CCoeControl + */ + void HandlePointerEventL(const TPointerEvent& aPointerEvent); + + /** + * The the rectangle within which the listbox must always fit. + * @param aMaxRect The largest allowed rect size, given in + * screen relative coordinate system. + */ + void SetMaxRect( TRect aMaxRect ); + + /** + * Adjusts the control rect according to amount of visible contacts. + * @param aNumberOfNames Number of contact to which to adjust. + */ + void SetRectToNumberOfItems( TInt aNumberOfNames ); + + + /** + * Puts list box control into focus, and moved the focus highlight + * to the appropriate item. + * @param aKeyEvent key event + * @param aType key event type + * @return Whether the key was handled or not. + */ + TKeyResponse SetFocusedWithKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); + + + /** + * Gets the height of the listbox based on the number of items. + * @param aNum Number of items. + */ + TInt GetHeightBasedOnNumberOfItems( TInt aNum ) const; + + /** + * Gets the contact index of the currently selected contact item. + * Contact index points to contact data object in + * CEasyDialingContactDataManager. + * @return Contact data manager index. + */ + TInt CurrentContactDataIndex(); + + /** + * Return contact link of current item packaged in HBufC object. + * @return Contact link. + */ + HBufC8* CurrentContactLinkLC(); + +public: + /** + * From MAknLongTapDetectorCallBack + */ + void HandleLongTapEventL( const TPoint& aPenEventLocation, const TPoint& aPenEventScreenLocation ); + +protected: + + /** + * From CEikFormattedCellListBox. + */ + virtual void FocusChanged(TDrawNow aDrawNow); + + /** + * From CEikFormattedCellListBox. + */ + virtual void CreateItemDrawerL(); + + /** + * From CEikFormattedCellListBox. + */ + virtual void SizeChanged(); + + /** + * From CCoeControl + */ + TTypeUid::Ptr MopSupplyObject(TTypeUid aId); + +private: + + /** Background control context. Owned. */ + CAknsFrameBackgroundControlContext* iBGContext; + + /** Pointer to a contact data manager; Not Own. */ + CEasyDialingContactDataManager* iContactDataManager; + + /** Number of matching contacts. */ + TInt iNumberOfNames; + + /** Maximum size rectangle. */ + TRect iMaxRect; + + /** Detector for Long Tap event; Owned. */ + CAknLongTapDetector* iLongTapDetector; + + /** Flag set when long pointer press has been handled after latest pointer down event.*/ + TBool iPointerLongPressHandled; + }; + +#endif // _EASYDIALINGLISTBOX_H + + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialinglistboxdata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialinglistboxdata.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,216 @@ +/* +* 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: Easy dialing listbox data. +* +*/ + + +#ifndef _EASYDIALINGLISTBOXDATA_H +#define _EASYDIALINGLISTBOXDATA_H + + +// INCLUDE FILES +#include + +// CONSTANTS + +/* + * Matching highlight separator character is used in listbox model to separate + * matching and non-matching charaters. 0x1F is chosen for this because + * it is a control character "INFORMATION SEPARATOR ONE" of ASCII set. + * User of the listbox must use this character in creating list box item + * strings. + */ +// FORWARD DECLARATIONS +class CEasyDialingListBox; +class CEasyDialingContactDataManager; + +// CLASS DECLARATIONS + +/* + * Easy dialing listbox data class. + */ + +class CEasyDialingListBoxData : public CFormattedCellListBoxData + { +public: + + class TExtendedColors : public CFormattedCellListBoxData::TColors + { + public: + + TExtendedColors(); + + /** The matching text colour. */ + TRgb iMatchingText; + + /** The matching background colour. */ + TRgb iMatchingBack; + + }; + + + /** + * Constructor. + */ + CEasyDialingListBoxData(); + + /** + * Destructor + */ + ~CEasyDialingListBoxData(); + + /** + * Second phase constructor of the class. + * @return Pointer to the instance. + */ + static CEasyDialingListBoxData* NewL(); + + /** + * Draws selected item. + */ + void DrawData( + const TListItemProperties& aItemProperties, + CWindowGc& aGc, + const TDesC* aText, + const TRect& aRect, + TBool aHighlight, + const TExtendedColors& aColors ) const; + + /** + * Draws selected item highlight. + * @param aGc Graphics context. + * @param aItemRect Item rectangle. + */ + void DrawHighlight( CWindowGc &aGc, const TRect &aItemRect ) const; + + /** + * Sets the contact data manager. Must be set before using the listbox. + * @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. + */ + void SetEDLBXControl( CEasyDialingListBox* aControl ); + + /** + * Handle change in list item size + */ + void HandleItemSizeChange(); + +protected: + + void ConstructLD(); + +private: + + /** + * Determines fonts for contact name and company name. + * The font sizes are determined based on list box item height. + * This function must be called once before any drawing routines are + * done. + * @param aItemHeight List box item height + */ + void ObtainFonts( TInt aItemHeight ); + + /** + * Update the color bitmap used for fallback graphics for the Action Menu arrow according to + * size changes in listbox control. + * @param aSize New size. + */ + void UpdateColorBitmapL( const TSize& aSize ); + + /** + * Draws the data for one list item. + * @param aProperties List item property structure. + * @param aGc Graphics context. + * @param aText String containing list item data information. + * @param aItemRect Item rectangle. + * @param aHighlight ETrue if the item has highlight, EFalse otherwise. + * @param aColors Structure containing used colors. + */ + void DrawDataFormatted( + TListItemProperties aProperties, + CWindowGc& aGc, + const TDesC* aText, + 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. + * @param aBoundingBox Rectangle containing bounds for contact thumbnail. + * @param aDescId Descriptor containing contact id. + */ + TBool ContactThumbnailDrawing( + CWindowGc& aGc, + TRect aBoundingBox, + TPtrC aDescId) const; + + /** + * Draws the Action Menu. + * @param aGc Graphics context. + * @param aActionMenuArrowRect Rectangle where arrow is to be drawn. + */ + void DrawArrowIcon( CWindowGc& aGc, TRect aActionMenuArrowRect ) const; + + /** + * Draws the Favourite Icon. Takes the name rect as a parameter. Name rect + * 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 aTextWidth The width of the name + * @param aEffectiveRect The whole listbox item rect. Used for mirroring. + */ + void DrawFavouriteIcon( + CWindowGc& aGc, + TRect aNameRectUnMirrored, + TInt aTextWidth, + TRect aEffectiveRect) const; + +private: + + /** Font to be used showing contact name. Not owned. */ + CFont* iContactNameFont; + + /** Font to be used showing company name. Not owned. */ + CFont* iCompanyNameFont; + + /** Handle for loading and storing the thumbnails. Not owned.*/ + CEasyDialingContactDataManager* iContactDataManager; + + /** Action Menu LeftPointing Arrow for mirrored layout. Owned. */ + CGulIcon* iArrowPointingRight; + + /** 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; + + /** Pointer to listbox. Not owned. */ + CEasyDialingListBox* iControl; + }; + + +#endif // _EASYDIALINGLISTBOXDATA_H + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialinglistboxitemdrawer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialinglistboxitemdrawer.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,112 @@ +/* +* 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: Easy dialing listbox list item drawer. +* +*/ + + +#ifndef _EASYDIALINGLISTBOXDRAWER_H +#define _EASYDIALINGLISTBOXDRAWER_H + + +// INCLUDE FILES +#include + +// FORWARD DECLARATIONS + +class CEasyDialingListBoxData; + +// CLASS DECLARATIONS + +/* + * Easy dialing list item drawer. + */ + +class CEasyDialingListBoxItemDrawer : public CFormattedCellListBoxItemDrawer + { +public: + + /** + * Constructor. + * @param aTextListBoxModel Listbox mode. + * @param aFont Font parameter required by super class constructor. + * @param aFormattedCellData List box data pointer. + */ + CEasyDialingListBoxItemDrawer( + MTextListBoxModel* aTextListBoxModel, + const CFont* aFont, + CFormattedCellListBoxData* aFormattedCellData); + + /** + * Returns pointer to item data. + */ + CEasyDialingListBoxData* EasyDialingCellData() const; + + /** + * Draws item. + * @param aItemIndex Index of the item. + * @param aItemRectPos Position of the item. + * @param aItemIsSelected ETrue if item is selected, EFalse otherwise. + * @param aItemIsCurrent ETrue if this item is the current item. + * @param aViewIsEmphasized ETrue if item is emphasized. + * @param aViewIsDimmed ETrue if item is dimmed. + */ + void DrawItem( + TInt aItemIndex, + TPoint aItemRectPos, + TBool aItemIsSelected, + TBool aItemIsCurrent, + TBool aViewIsEmphasized, + TBool aViewIsDimmed) const; + + /** + * Draws data content of the item. Not just text but + * but any content. + * @param aItemIndex Index of the item. + * @param aItemTextRect Rectangle of the item. + * @param aItemIsCurrent ETrue is the item is currently selected item. + * @param aViewIsEmphasized ETrue if the item is emphasized. + * @param aItemIsSelected ETrue if item is selected. + */ + void DrawItemText( + TInt aItemIndex, + const TRect& aItemTextRect, + TBool aItemIsCurrent, + TBool aViewIsEmphasized, + TBool aItemIsSelected ) const; + + /** + * Finds proper listbox colors from theme and makes them active. + */ + void SetColors(); + +protected: + + /** + * Draws background of list item. + * @param aItemTextRect Item rectangle. + */ + void DrawBackgroundAndSeparatorLines( const TRect& aItemTextRect ) const; + +protected: + + /** The matching text colour. */ + TRgb iMatchingText; + + /** The matching text background colour. */ + TRgb iMatchingBack; + }; + + +#endif // _EASYDIALINGLISTBOXDRAWER_H diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialinglistboxview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialinglistboxview.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,51 @@ +/* +* 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: Easy dialing list box view. +* +*/ + +#ifndef _EASYDIALINGLISTBOXVIEW_H +#define _EASYDIALINGLISTBOXVIEW_H + +// INCLUDE FILES +#include + +// CLASS DECLARATIONS + +/* + * Easy dialing listbox view. + */ + +class CEasyDialingListBoxView : public CFormattedCellListBoxView + { +public: + + /** + * Sets current index value to outside-of-range value. After this, no + * item in the listbox is highlighted. + */ + void SetCurrentItemIndexToNone(); + }; + + +#endif // _EASYDIALINGLISTBOXVIEW_H + + + + + + + + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialinglogger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialinglogger.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,98 @@ +/* +* 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: Easy dialing logging functions. +* +*/ + + +#ifndef __EASYDIALINGLOGGER_H__ +#define __EASYDIALINGLOGGER_H__ + +// Note! These macros are to be used in trace prints (legacy support). +// To be used only in error situations and major events only ! +// Otherwise use OST - Open System Trace + +#ifdef _DEBUG + +// #define USE_FILE_LOGGING + +// From this point on, internal implementation + +#include // for RDebug::Print + +#ifdef USE_FILE_LOGGING +#include +_LIT( KLogDir, "ed" ); +_LIT( KLogFile, "easydialing.log" ); +#endif + + +NONSHARABLE_CLASS(TOverflowTruncate) : public TDes16Overflow + { + public: + void Overflow(TDes16& /*aDes*/) {} + }; + +inline void DoDebugPrintF(TRefByValue aFmt, VA_LIST& aList) + { + TBuf<200> buf; + TOverflowTruncate overFlow; + buf.AppendFormatList( aFmt, aList, &overFlow ); + _LIT(KLogPrintFormat,"%S: %S"); // Log printing format + const TDesC& thname = RThread().Name(); // With FullName more info + RDebug::Print( KLogPrintFormat, &thname, &buf ); +#ifdef USE_FILE_LOGGING + RFileLogger::Write(KLogDir, KLogFile, EFileLoggingModeAppend, buf); +#endif + } + +inline void DebugPrintF(const TRefByValue aFmt,...) + { + VA_LIST list; + VA_START(list,aFmt); + DoDebugPrintF(aFmt, list); + } + + +// Macros + +#define LOGSTRING( TEXT ) DebugPrintF( _L( TEXT ) ) +#define LOGSTRING1( TEXT, VAR1 ) DebugPrintF( _L( TEXT ), VAR1 ) +#define LOGSTRING2( TEXT, VAR1, VAR2 ) DebugPrintF( _L( TEXT ), VAR1, VAR2 ) + +#define PERF_MEASURE_START \ + TTime startTime, endTime; \ + startTime.HomeTime();\ + DebugPrintF( _L("EasyDialingPlugin: Measure start..") ); + + +#define PERF_MEASURE_STOP \ + endTime.HomeTime(); \ + TTimeIntervalMicroSeconds microsecs = endTime.MicroSecondsFrom( startTime ); \ + TReal timeSecs=(TReal)((TReal)(microsecs.Int64())/1000); \ + DebugPrintF( _L("EasyDialingPlugin: Measure stop, time taken %5.3f msecs"), timeSecs ); + +#else + +#define LOGSTRING( TEXT ) +#define LOGSTRING1( TEXT, VAR1 ) +#define LOGSTRING2( TEXT, VAR1, VAR2 ) + +#define PERF_MEASURE_START +#define PERF_MEASURE_STOP + +#endif + +#endif + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialingpanics.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialingpanics.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,47 @@ +/* +* 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: Easy dialing panic codes and macro. +* +*/ + +#ifndef EASYDIALINGPANICS_H_ +#define EASYDIALINGPANICS_H_ + +/** Easy dialing panic codes */ +enum + { + EEasyDialingPanicInvalidListBoxModelString = 200, + EEasyDialingPanicNoResults, + EEasyDialingPanicNoContactSelected, + EEasyDialingActionNotSupported, + EEasyDialingNoFontFound, + // add further panics here + }; + + +/** Easy dialing string for panic function */ +_LIT( KEasyDialingPanicString, "Easy dialing" ); + + +/** + * Panic function for easy dialing module. + * + */ +inline void EasyDialingPanic( TInt aReason ) + { + User::Panic( KEasyDialingPanicString, aReason ); + } + + +#endif /* EASYDIALINGPANICS_H_ */ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialingplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialingplugin.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,474 @@ +/* +* 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: Easy dialing plugin implementation. +* +*/ + + +#ifndef __CEASYDIALINGPLUGIN_H__ +#define __CEASYDIALINGPLUGIN_H__ + +// INCLUDES + +#include "dialingextensioninterface.h" +#include +#include +#include +#include "measydialingcenreplistenerobserver.h" +#include "mcontactdatamanagerobserver.h" +#include "medcontactorobserver.h" + +// Phonebook engine API +#include +#include + +// ListBox Observer API +#include + +// MAknInputBlockCancelHandler +#include + + +// CONSTANTS + +/** Maximum constact search string length. */ +const TInt KEDMaxSearchStringLength = 200; + +/** Maximum string length for listbox model string. */ +const TInt KEDMaxContactStringLength = 600; + +/** Maximum phone number length. */ +const TInt KEDMaxPhoneNumberLength = 64; + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +class CPSRequestHandler; +class CPsQuery; +class CVPbkContactStoreUriArray; +class CVPbkContactManager; +class CEasyDialingListBox; +class MVPbkContactLink; +class CEasyDialingCenrepListener; +class CEasyDialingContactDataManager; +class CEDContactorService; +class CEikMenuPane; +class CAsyncCallBack; + + +// CLASS DECLARATION + +/** +* Easy dialing plugin. +*/ +class CEasyDialingPlugin : public CDialingExtensionInterface, + public MVPbkContactStoreListObserver, + public MPsResultsObserver, + public MCCAObserver, + public MEasyDialingCenrepListenerObserver, + public MContactDataManagerObserver, + public MEDContactorObserver, + public MEikListBoxObserver, + public MAknInputBlockCancelHandler +{ +public: + + /** + * Static constructor. + * @return: Created object. + */ + static CEasyDialingPlugin* NewL(); + + /** + * Destructor. + */ + virtual ~CEasyDialingPlugin(); + +public: // from CCoeControl + + /** + * From CCoeControl. + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); + + /** + * From CCoeControl + */ + TInt CountComponentControls() const; + + /** + * From CCoeControl + */ + CCoeControl* ComponentControl( TInt aIndex ) const; + + /** + * From CCoeControl + */ + void MakeVisible( TBool aVisible ); + +protected: + + /** + * See CCoeControl + */ + void SizeChanged(); + + /** + * See CCoeControl + */ + void FocusChanged( TDrawNow aDrawNow ); + +public: // from CDialingExtensionInterface + + /** + * Does further initialization to component. + * @param: parent container of this control. + */ + virtual void InitializeL( CCoeControl& aParent ); + + /** + * Reset the previour easy dialing search. + */ + void Reset(); + + /** + * Adds an observer to dialing extension. + * @param: aObserver: observer to be added. + */ + void AddObserverL( MDialingExtensionObserver* aObserver ); + + /** + * Removes an observer from dialing extension. + * @param: aObserver: observer to be removed. + */ + void RemoveObserver( MDialingExtensionObserver* aObserver ); + + /** + * Sets input string (search string) to easy dialing. + * @param: aDesC: input string descriptor. + */ + void SetInputL( const TDesC& aDesC ); + + /** + * Returns the number of matching contacts in previous search. + * @return: number of matches. + */ + TInt MatchingContactCount(); + + /** + * Gets the resource id of plugin's control button area resource. + * + * @return Resource id. + */ + TInt CbaResourceId(); + + /** + * From CDialingExtensionInterface. + * Gets the resource id of plugin's menu bar resource. + * + * @return Resource id. + */ + TInt MenuResourceId(); + + /** + * From CDialingExtensionInterface. + * Gets the resource id of plugin's menu bar resource. + * + * @param aMenuPane Menu pane + * @param aMenuResourceId Menu bar resource id. + * @return Resource id. + */ + TBool InitializeMenuPaneL( CEikMenuPane& aMenuPane, TInt aMenuResourceId ); + + /** + * From CDialingExtensionInterface. + * Gets the resource id of plugin's menu bar resource. + * + * @param aCommand Command id. + * @return ETrue if command was handled, EFalse otherwise. + */ + TBool HandleCommandL( TInt aCommand ); + + /** + * Tells if extension is currently enabled from settings. + * @return ETrue if extension is enabled, EFalse otherwise. + */ + TBool IsEnabled(); + +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 ); + + /** + * From MEasyDialingCenrepListenerObserver. + */ + void EasyDialingContactThumbnailsSettingsChanged( TInt aThumbnailSettingValue ); + + /** + * From MContactDataManagerObserver. + */ + void AllContactDataLoaded(); + + /** + * From MEDContactorObserver. + */ + void InformContactorEvent( MEDContactorObserver::TEvent aEvent ); + + /** + * From MEikListBoxObserver. + */ + void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType ); + + /** + * From MAknInputBlockCancelHandler. + */ + void AknInputBlockCancel(); + + +private: + + /** + * Constructor. + */ + CEasyDialingPlugin (); + + /** + * Second phase constructor. + */ + void ConstructL (); + + void InitPredictiveContactSearchL(); + + /** + * From MPsResultsObserver. + */ + virtual void HandlePsResultsUpdate( RPointerArray& aResults, RPointerArray& aSeqs ); + virtual void HandlePsError( TInt aErrorCode ); + virtual void CachingStatus( TCachingStatus& aStatus, TInt& aError ); + + /** + * FindContactFieldPCSIndex + * Searches the index that stores the given contact field. + * To see possible contact field numbering, see file "vpbkeng.rsg". + * @param: contact field to search for. See file "vpbkeng.rsg" + * for contact field numbering. + * @return: index of the contact field. KErrNotFound if field was not found. + * Non-negative return values are for indexing CPsClientData array. + */ + TInt FindContactFieldPCSIndexL( TInt aIndex ); + + /** + * HandlePsResultsUpdateL + * A leaving function to be trapped in HandlePsResultsUpdate. + */ + void HandlePsResultsUpdateL( RPointerArray& aResults, RPointerArray& aSeqs ); + +public: + + /** + * MCCAObserver function handling exit of CCA launcher. + */ + void CCASimpleNotifyL( TNotifyType aType, TInt aReason ); + +private: + + /* + * Informs all observers registered with AddObserverL. + * @param: aEvent: event id to be informed. + */ + void InformObservers( MDialingExtensionObserver::TEvent aEvent ); + + +private: + + /** + * This method perform the drawing functionality of the component. + * @param: aRect: The rect to be rendered + * @return None + */ + void Draw( const TRect& aRect ) const; + + /** + * Initiates predictive contact search. + */ + void LaunchSearchL(); + + /** + * Opens ca launcher for currently selected contact. + */ + void LaunchCurrentContactL(); + + /** + * Creates listbox model string. + */ + void CreateListBoxContactStringL( + const TDesC& aContactString, + MVPbkContactLink *aLink, + TBool aMatchThumbnails, + TBool aFav ); + + /** + * Creates string with first name, last name and company name. + */ + HBufC* CreateContactStringLC( CPsClientData* aResult, CPbkContactEngine::TPbkNameOrder aNameOrder ); + + /** Possible actions launched by this plugin. */ + enum TEasyDialingAction + { + ENoActionDefined, + ECallCurrentContact, + EVideoCallCurrentContact, + ESendMessageCurrentContact, + ELaunchCurrentContact, + ELaunchSearch + }; + + /** + * Initiates asynchronous callback to launch action and sets + * input blocker active. + */ + void AsyncActionLaunchL( const TEasyDialingAction aAction ); + + /** + * Callback for CAsyncCallBack. Launches action set in iActionToBeLaunched + * and stops input block when launch is done. + */ + static TInt AsyncCallBackToLaunchAction( TAny* aPtr ); + + /** + * Launches action defined in iActionToBeLaunched. + */ + void DoLaunchActionL(); + + /** + * Cancels async action launch and input block. + */ + void CancelActionLaunchAndInputBlock(); + + +private: + + /** Textual version of current search string. */ + TBuf iSearchString; + + /** Handle to predictive search engine. Owned. */ + CPSRequestHandler* iPredictiveContactSearchHandler; + + /** PCS type of presentation of the current search string. Owned. */ + CPsQuery* iPredictiveSearchQuery; + + /** If ETrue, completing PCS searches are not displayed but just discarded. */ + TBool iDiscardCompletingSearches; + + /** ETrue if contact database has been changed and a new search is needed. */ + TBool iNewSearchNeeded; + + /** Array of used data stores. Owned. */ + RPointerArray iContactDataStores; + + /** Contact store array. Owned. */ + CVPbkContactStoreUriArray* iContactStoreUriArray; + + /** Contact manager handle. Owned. */ + CVPbkContactManager* iContactManager; + + /** Search result field index for first name field. */ + TInt iFirstNamePCSIndex; + + /** Search result field index for last name field. */ + TInt iLastNamePCSIndex; + + /** Search result field index for first name field. */ + TInt iCompanyNamePCSIndex; + + /** Array containing observers to this class. Owned. */ + RPointerArray iObservers; + + /** Contact listbox. Owned. */ + CEasyDialingListBox* iContactListBox; + + /** Listbox model from search results. Owned. */ + CDesCArrayFlat* iListBoxModel; + + /** Number of found matching contacts from most recent search. */ + TInt iNumberOfNames; + + /** Handle to contact launcher. */ + MCCAConnectionExt* iContactLauncher; + + /** ETrue if contact launcher (a.k.a. communication launcher) is open. */ + TBool iContactLauncherActive; + + /** If true, contact listbox must not reset focus when contact launcher exits. */ + TBool iRememberFocus; + + /** Working buffer for creating contact string to listbox. */ + TBuf iContactStringCreationBuffer; + + /** Central repository listener. Owned. */ + CEasyDialingCenrepListener* iCenrepListener; + + /** Contact data manager. Owned. */ + CEasyDialingContactDataManager* iContactDataManager; + + /** Easy dialing contactor service. Owned. */ + CEDContactorService* iContactorService; + + /** Easy dialing resource file offset in current application. */ + TInt iResourceFileOffset; + + /** Blocks user input when action is being launched. NULL if not active. Owned. */ + CAknInputBlock* iInputBlocker; + + /** Used to launch action asynchronously. Owned.*/ + CAsyncCallBack* iAsyncCallBack; + + /** Action to be launched next asynchronously. */ + TEasyDialingAction iActionToBeLaunched; + +}; + + +#endif //__CEASYDIALINGPLUGIN_H__ + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/easydialingutils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/easydialingutils.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,45 @@ +/* +* 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: Helper class for easydialing. +* +*/ + +#ifndef __EASYDIALINGUTILS_H__ +#define __EASYDIALINGUTILS_H__ + +#include // for TPbkNameOrder + +class EasyDialingUtils + { + public: + + /* + * Creates contact string from first name, last name and company name. + * F.ex. "Firstname Lastname\tCompany" + * @param aFirstName First name + * @param aFirstName Last name + * @param aFirstName Comapany name + * @param aNameOrder The name ordering to be used + * @return Contact string (in cleanupstack) + */ + static HBufC* CreateContactStringLC( + const TDesC& aFirstName, + const TDesC& aLastName, + const TDesC& aCompanyName, + CPbkContactEngine::TPbkNameOrder aNameOrder ); + }; + +#endif //__EASYDIALINGUTILS_H__ + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/mcontactdatamanagerobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/mcontactdatamanagerobserver.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,31 @@ +/* +* 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: Easy dialing contac data observer class. +* +*/ + +#ifndef __MCONTACTDATAMANAGEROBSERVER_H__ +#define __MCONTACTDATAMANAGEROBSERVER_H__ + +/** + * MContactDataManagerObserver + * Thumbnail manager observer interface + */ +class MContactDataManagerObserver + { +public: + virtual void AllContactDataLoaded() = 0; + }; + +#endif //__MCONTACTDATAMANAGEROBSERVER_H__ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/inc/measydialingcenreplistenerobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/inc/measydialingcenreplistenerobserver.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,44 @@ +/* +* 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: Easy dialing cenrep observer class. +* +*/ + + +#ifndef __MEASYDIALINGCENREPLISTENEROBSERVER_H__ +#define __MEASYDIALINGCENREPLISTENEROBSERVER_H__ + +/** + * Easy dialing central repository observer. + */ +class MEasyDialingCenrepListenerObserver + { +public: + + + /** + * Called when easy dialing feature setting (on / off) value is changed. + * @param aValue 1 if setting is set on, otherwise 0. + */ + virtual void EasyDialingSettingsChanged(TInt aValue) = 0; + + + /** + * Called when easy dialing thumbnail setting (shown / not shown) value is changed. + * @param aThumbnailSettingValue 1 if shown, otherwise 0. + */ + virtual void EasyDialingContactThumbnailsSettingsChanged( TInt aThumbnailSettingValue ) = 0; + }; + +#endif //__MEASYDIALINGCENREPLISTENEROBSERVER_H__ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/layers.sysdef.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/layers.sysdef.xml Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,19 @@ + + +]> + + + + + + + + + + + + + + + \ No newline at end of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/loc/easydialing.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/loc/easydialing.loc Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,38 @@ +/* +* 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: Easy dialing localization file. +* +*/ + +// LOCALISATION STRINGS + +// d: Option in Number Acquisition state menu. +// d: It contains submenu on/off states of easy dialing. +// l: list_single_pane_t1_cp2/opt3 +// r:9.1 +#define qtn_easydial_option_submenu_title "Contact search" + +//d: Submenu item for easy dialing setting. +//l: list_single_popup_submenu_pane_t1/opt1 +//r:9.2 +// +#define qtn_easy_dialing_on "On" + +//d: Submenu item for easy dialing setting. +//l: list_single_popup_submenu_pane_t1/opt1 +//r:9.2 +// +#define qtn_easy_dialing_off "Off" + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/rom/easydialingplugin.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/rom/easydialingplugin.iby Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,41 @@ +/* +* 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: The ROM definition file +* +*/ + +#ifdef FF_HOME_SCREEN_EASY_DIALING + +#ifndef __ED_PLUGIN_IBY_ +#define __ED_PLUGIN_IBY_ + +#include + +// Stub sis file +data=ZSYSTEM\install\easydialing_stub.sis System\Install\easydialing_stub.sis + +// Binary code and not localized resources + +ECOM_PLUGIN(easydialingplugin.dll,easydialingplugin.rsc) + +file=ABI_DIR\BUILD_DIR\edcontactor.dll SHARED_LIB_DIR\edcontactor.dll +data=DATAZ_\RESOURCE_FILES_DIR\edcontactor.rsc RESOURCE_FILES_DIR\edcontactor.rsc + +data=\epoc32\data\z\private\10202be9\200212A0.txt "\private\10202be9\200212A0.txt" + +#endif // __ED_PLUGIN_IBY_ + +#endif // FF_HOME_SCREEN_EASY_DIALING + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/rom/easydialingpluginresources.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/rom/easydialingpluginresources.iby Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,34 @@ +/* +* 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: The ROM definition file +* +*/ + +#ifdef FF_HOME_SCREEN_EASY_DIALING + +#ifndef __ED_PLUGINRESOURCES_IBY_ +#define __ED_PLUGINRESOURCES_IBY_ + +#include + +// Localisable resources + +data=DATAZ_\RESOURCE_FILES_DIR\easydialingpluginresources.rsc RESOURCE_FILES_DIR\easydialingpluginresources.rsc +data=DATAZ_\APP_RESOURCE_DIR\easydialing.mif APP_RESOURCE_DIR\easydialing.mif + +#endif // __ED_PLUGINRESOURCES_IBY_ + +#endif FF_HOME_SCREEN_EASY_DIALING + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/src/dllmain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/src/dllmain.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,79 @@ +/* +* 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: Easy dialing DLL main. +* +*/ + + +// INCLUDE FILES + +#include +#include +#include "easydialingplugin.h" +#include "easydialingconstants.hrh" + + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +const TImplementationProxy ImplementationTable[] = + { +#ifdef __EABI__ + IMPLEMENTATION_PROXY_ENTRY( EASYDIALING_PLUGIN_ECOM_IMPL_UID, CEasyDialingPlugin::NewL ) +#else + {{EASYDIALING_PLUGIN_ECOM_IMPL_UID}, CEasyDialingPlugin::NewL } +#endif + }; + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// --------------------------------------------------------- +// ImplementationGroupProxy +// +// Provides a key value pair table, this is used to identify +// Function used to return an instance of the proxy table. +// the correct construction function for the requested interface. +// --------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy (TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + +// --------------------------------------------------------- +// E32Dll +// +// Standard Symbian OS DLL entry point. +// --------------------------------------------------------- +// +#ifndef EKA2 +TBool E32Dll(TDllReason) + { + return ETrue; + } +#endif // EKA2 diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/src/easydialingcenreplistener.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/src/easydialingcenreplistener.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,135 @@ +/* +* 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: Easy dialing cenrep listener. +* +*/ + +// INCLUDE FILES +#include +#include +#include "easydialingcenreplistener.h" +#include "measydialingcenreplistenerobserver.h" +#include "easydialingcrkeys.h" + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// CEasyDialingCenrepListener::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CEasyDialingCenrepListener* CEasyDialingCenrepListener::NewL(MEasyDialingCenrepListenerObserver* aObserver) + { + CEasyDialingCenrepListener* self = new (ELeave) CEasyDialingCenrepListener(aObserver); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CEasyDialingCenrepListener::~CEasyDialingCenrepListener +// Destructor +// ----------------------------------------------------------------------------- +// +CEasyDialingCenrepListener::~CEasyDialingCenrepListener() + { + if (iNotifyHandler) + { + iNotifyHandler->StopListening(); + delete iNotifyHandler; + iNotifyHandler = NULL; + } + + delete iClient; + } + +// ----------------------------------------------------------------------------- +// CEasyDialingCenrepListener::CEasyDialingCenrepListener +// C++ default constructor. +// ----------------------------------------------------------------------------- +// +CEasyDialingCenrepListener::CEasyDialingCenrepListener(MEasyDialingCenrepListenerObserver* aObserver) + : iObserver(aObserver), + iEasyDialingSettingValue(0), + iContactThumbnailsSettingsValue(1) + + { + } + +// ----------------------------------------------------------------------------- +// CEasyDialingCenrepListener::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CEasyDialingCenrepListener::ConstructL() + { + iClient = CRepository::NewL(KCRUidEasyDialSettings); + + User::LeaveIfError(iClient->Get( KEasyDialing, iEasyDialingSettingValue )); + User::LeaveIfError(iClient->Get( KEasyDialingContactThumbnails, iContactThumbnailsSettingsValue )); + + iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iClient ); + iNotifyHandler->StartListeningL(); + } + +// ----------------------------------------------------------------------------- +// CEasyDialingCenrepListener::KeyValueL +// Returns key value +// ----------------------------------------------------------------------------- +// +TInt CEasyDialingCenrepListener::Value() + { + return iEasyDialingSettingValue; + } + +// ----------------------------------------------------------------------------- +// CEasyDialingCenrepListener::SetEasyDialingSettingsValue +// Sets key value. +// ----------------------------------------------------------------------------- +// +void CEasyDialingCenrepListener::SetEasyDialingSettingsValue( const TInt aValue ) + { + iClient->Set( KEasyDialing, aValue ); + } + +// ----------------------------------------------------------------------------- +// CEasyDialingCenrepListener::HandleNotifyInt +// ----------------------------------------------------------------------------- +// +void CEasyDialingCenrepListener::HandleNotifyGeneric( TUint32 aId ) + { + TInt value(0); + + iClient->Get( aId, value ); + + if( aId == KEasyDialingContactThumbnails) + { + if( value!= iContactThumbnailsSettingsValue ) + { + iContactThumbnailsSettingsValue = value; + iObserver->EasyDialingContactThumbnailsSettingsChanged( iContactThumbnailsSettingsValue ); + } + } + + else if ( aId == KEasyDialing ) + { + if ( value != iEasyDialingSettingValue ) + { + iEasyDialingSettingValue = value; + iObserver->EasyDialingSettingsChanged( iEasyDialingSettingValue ); + } + } + } +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/src/easydialingcontactdata.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/src/easydialingcontactdata.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,185 @@ +/* +* 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: Easy dialing contact data container. +* +*/ + +#include +#include +#include + +#include "easydialingcontactdata.h" + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::CEasyDialingContactData +// --------------------------------------------------------------------------- +// +CEasyDialingContactData::CEasyDialingContactData(MVPbkContactLink* aContactLink) + : iContactLink(aContactLink), iThumbnail(NULL),iFav(EFalse), iLoaded(EFalse) + { + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::~CEasyDialingContactData +// --------------------------------------------------------------------------- +// +CEasyDialingContactData::~CEasyDialingContactData() + { + delete iThumbnail; + delete iContactLink; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::Id +// --------------------------------------------------------------------------- +// +MVPbkContactLink* CEasyDialingContactData::ContactLink() + { + return iContactLink; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::Thumbnail +// --------------------------------------------------------------------------- +// +CFbsBitmap* CEasyDialingContactData::Thumbnail() + { + return iThumbnail; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::SetThumbnail +// --------------------------------------------------------------------------- +// +void CEasyDialingContactData::SetThumbnail(CFbsBitmap* aThumbnail) + { + if (iThumbnail) + { + delete iThumbnail; + } + iThumbnail = aThumbnail; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::Fav +// --------------------------------------------------------------------------- +// +TBool CEasyDialingContactData::Fav() + { + return iFav; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::SetFav +// --------------------------------------------------------------------------- +// +void CEasyDialingContactData::SetFav(TBool aFav) + { + iFav = aFav; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::IsLoaded +// --------------------------------------------------------------------------- +// +TBool CEasyDialingContactData::IsLoaded() + { + return iLoaded; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::LoadingComplete +// --------------------------------------------------------------------------- +// +void CEasyDialingContactData::LoadingComplete() + { + iLoaded = ETrue; + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::DeleteThumbnail +// --------------------------------------------------------------------------- +// +void CEasyDialingContactData::DeleteThumbnail() + { + delete iThumbnail; + iThumbnail = NULL; + iLoaded = EFalse; + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::VoiceCallAvailable +// --------------------------------------------------------------------------- +// +TBool CEasyDialingContactData::VoiceCallAvailable() + { + return iVoiceCallAvailable; + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::SetVoiceCallAvailable +// --------------------------------------------------------------------------- +// +void CEasyDialingContactData::SetVoiceCallAvailable( TBool aVailable ) + { + iVoiceCallAvailable = aVailable; + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::VideoCallAvailable +// --------------------------------------------------------------------------- +// +TBool CEasyDialingContactData::VideoCallAvailable() + { + return iVideoCallAvailable; + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::SetVideoCallAvailable +// --------------------------------------------------------------------------- +// +void CEasyDialingContactData::SetVideoCallAvailable( TBool aVailable ) + { + iVideoCallAvailable = aVailable; + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::UniEditorAvailable +// --------------------------------------------------------------------------- +// +TBool CEasyDialingContactData::UniEditorAvailable() + { + return iUniEditorAvailable; + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactData::SetUniEditorAvailable +// --------------------------------------------------------------------------- +// +void CEasyDialingContactData::SetUniEditorAvailable( TBool aVailable ) + { + iUniEditorAvailable = aVailable; + } + + + + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/src/easydialingcontactdatamanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/src/easydialingcontactdatamanager.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,790 @@ +/* +* 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: Easy dialing contact data manager. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include // MVPbkContactStore +#include +#include + +#include "easydialingcontactdata.h" +#include "easydialingcontactdatamanager.h" +#include "easydialingutils.h" +#include "mcontactdatamanagerobserver.h" +#include "easydialingcrkeys.h" +#include "easydialinglogger.h" + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::CEasyDialingContactDataManager +// --------------------------------------------------------------------------- +// +CEasyDialingContactDataManager::CEasyDialingContactDataManager(CVPbkContactManager* aContactManager) + : iImageOperation(NULL), iContactManager(aContactManager), iContactOperation(NULL), + iContactThumbnailSetting(ETrue), iStoreReady(EFalse) + { + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::~CEasyDialingContactDataManager +// --------------------------------------------------------------------------- +// +CEasyDialingContactDataManager::~CEasyDialingContactDataManager() + { + Reset(); + iWaitingContacts.Close(); + iContactDataArray.Close(); + delete iImageManager; + delete iVPbkTopContactManager; + delete iImageOperation; + delete iContactOperation; + delete iFavsView; + if (iContactStore) + { + iContactStore->Close( *this); + } + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::ConstructL +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::ConstructL() + { + iImageManager = CPbk2ImageManager::NewL(*iContactManager); + + TVPbkContactStoreUriPtr uri( VPbkContactStoreUris::DefaultCntDbUri() ); + iContactStore = iContactManager->ContactStoresL().Find( uri ); + + iVPbkTopContactManager = CVPbkTopContactManager::NewL( *iContactManager ); + + iImageManagerParams.iFlags = TPbk2ImageManagerParams::EScaleImage | TPbk2ImageManagerParams::EKeepAspectRatio; + iThumbnailFieldType = iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_THUMBNAILPIC ); + + // Open the store + iContactStore->OpenL( *this ); + + // Read easydialing setting from cenrep. + CRepository* cenrep = CRepository::NewL( KCRUidEasyDialSettings ); + CleanupStack::PushL( cenrep ); + User::LeaveIfError( cenrep->Get( KEasyDialingContactThumbnails, iContactThumbnailSetting ) ); + CleanupStack::PopAndDestroy( cenrep ); + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::SetObserver +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::SetObserver(MContactDataManagerObserver* aObserver) + { + iObserver = aObserver; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::SetThumbnailSize +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::SetThumbnailSize(const TSize& aSize) + { + if (iImageManagerParams.iSize != aSize) + { + iImageManagerParams.iSize = aSize; + Reload(); + } + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::GetThumbnailIdL +// --------------------------------------------------------------------------- +// +HBufC* CEasyDialingContactDataManager::GetThumbnailIdL( + MVPbkContactLink* aContact, TBool aMatchThumbnails, TBool aFav ) + { + LOGSTRING("CEasyDialingContactDataManager: GetThumbnailIdL"); + TInt newIndex(KErrNotFound); + if (aMatchThumbnails) + { + newIndex = FindContactIndex( aContact ); + } + + LOGSTRING1("newIndex = %d", newIndex); + if (newIndex == KErrNotFound) + { + MVPbkContactLink* newLink = aContact->CloneLC(); + CEasyDialingContactData *newThumbnail = new (ELeave) CEasyDialingContactData(newLink); + CleanupStack::Pop(); // newLink + newIndex = iContactDataArray.Count(); + CleanupStack::PushL(newThumbnail); + iContactDataArray.AppendL(newThumbnail); + CleanupStack::Pop(newThumbnail); + } + + iContactDataArray[ newIndex ]->SetFav( aFav ); + + HBufC* id = HBufC::NewL( sizeof(TInt) * 2 ); // space for hex representation of TInt + TPtr ptr = id->Des(); + ptr.Num(newIndex, EHex); + LOGSTRING1("CEasyDialingContactDataManager: GetThumbnailIdL returns %S", id); + return id; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::GetThumbnail +// --------------------------------------------------------------------------- +// +TBool CEasyDialingContactDataManager::GetThumbnailAndFav(const TDesC& aId, CFbsBitmap*& aThumbnail, TBool& aFav) + { + LOGSTRING("CEasyDialingContactDataManager: GetThumbnailAndFav"); + TUint idVal(0); + TLex lex(aId); + lex.Val(idVal, EHex); + + TBool retVal; + + CEasyDialingContactData* thumbnail = iContactDataArray[idVal]; + aFav = thumbnail->Fav(); + if (thumbnail->IsLoaded()) + { + aThumbnail = thumbnail->Thumbnail(); + retVal = ETrue; + } + else + { + aThumbnail = NULL; + retVal = EFalse; + if (iWaitingContacts.Find(idVal) == KErrNotFound) + { + LOGSTRING1("iWaitingContacts.Append %d", idVal); + iWaitingContacts.Append(idVal); + TRAPD(err, LoadNextContactDataL()); + if (err) + { + HandleError(err); + } + } + } + LOGSTRING("CEasyDialingContactDataManager: GetThumbnailAndFav Exit"); + return retVal; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::IsFavL +// --------------------------------------------------------------------------- +// +TBool CEasyDialingContactDataManager::IsFavL( MVPbkContactLink* aLink ) + { + if ( iFavsView && iFavsView->IndexOfLinkL( *aLink ) > KErrNotFound ) + { + return ETrue; + } + else + { + return EFalse; + } + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::NumberOfFavsL +// --------------------------------------------------------------------------- +// +TInt CEasyDialingContactDataManager::NumberOfFavsL() + { + if ( iFavsView ) + { + return iFavsView->ContactCountL(); + } + else + { + return 0; + } + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::FavLinkLC +// --------------------------------------------------------------------------- +// +MVPbkContactLink* CEasyDialingContactDataManager::FavLinkLC( TInt aIndex ) + { + if ( iFavsView ) + { + return iFavsView->ContactAtL( aIndex ).CreateLinkLC(); + } + else + { + return NULL; + } + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::FavContactStringLC +// --------------------------------------------------------------------------- +// +HBufC* CEasyDialingContactDataManager::FavContactStringLC( TInt aIndex, CPbkContactEngine::TPbkNameOrder aNameOrder ) + { + const MVPbkBaseContactFieldCollection& fields = iFavsView->ContactAtL( aIndex ).Fields(); + TPtrC firstName; + TPtrC lastName; + TPtrC companyName; + for ( TInt i = 0; i < fields.FieldCount(); i++ ) + { + const MVPbkFieldType* fieldType = fields.FieldAt( i ).MatchFieldType( 0 ); + switch ( fieldType->FieldTypeResId() ) + { + case R_VPBK_FIELD_TYPE_LASTNAME: + { + const MVPbkContactFieldTextData& data = + MVPbkContactFieldTextData::Cast( fields.FieldAt( i ).FieldData() ); + lastName.Set( data.Text() ); + } + break; + case R_VPBK_FIELD_TYPE_FIRSTNAME: + { + const MVPbkContactFieldTextData& data = + MVPbkContactFieldTextData::Cast( fields.FieldAt( i ).FieldData() ); + firstName.Set( data.Text() ); + } + break; + case R_VPBK_FIELD_TYPE_COMPANYNAME: + { + const MVPbkContactFieldTextData& data = + MVPbkContactFieldTextData::Cast( fields.FieldAt( i ).FieldData() ); + companyName.Set( data.Text() ); + } + break; + default: + break; + } + } + + return EasyDialingUtils::CreateContactStringLC( firstName, lastName, companyName, aNameOrder ); + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::InitReady +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::InitReady() + { + // Initialization is ready. we can start loading contact data, if needed. + // (It is unlikely that there is any data to load at this point) + iStoreReady = ETrue; + if ( iWaitingContacts.Count() ) + { + TRAPD( err, LoadNextContactDataL() ) + if ( err ) + { + HandleError( err ); + } + } + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::FindContactIndex +// --------------------------------------------------------------------------- +// +TInt CEasyDialingContactDataManager::FindContactIndex( MVPbkContactLink* aContact ) + { + TInt index( KErrNotFound ); + + for ( TInt i = 0; i < iContactDataArray.Count(); i++ ) + { + if ( iContactDataArray[i]->ContactLink()->IsSame( *aContact ) ) + { + index = i; + break; + } + } + + return index; + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::LoadNextContactDataL +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::LoadNextContactDataL() + { + LOGSTRING("CEasyDialingContactDataManager: LoadNextContactDataL"); + if (!iImageOperation && !iContactOperation && iWaitingContacts.Count() && iStoreReady) + { + // first we need to load the contact item + CEasyDialingContactData* tn = iContactDataArray[iWaitingContacts[0]]; + iContactOperation = iContactManager->RetrieveContactL( *(tn->ContactLink()), *this); + + if (!iContactOperation) + { + tn->LoadingComplete(); + RDebug::Print(_L("iWaitingContacts.Remove %d"), iWaitingContacts[0]); + iWaitingContacts.Remove(0); + LoadNextContactDataL(); + } + } + LOGSTRING("CEasyDialingContactDataManager: LoadNextContactDataL Exit"); + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::PbkImageGetComplete +// From MPbkImageGetObserver +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::Pbk2ImageGetComplete(MPbk2ImageOperation& aOperation, CFbsBitmap* aBitmap) + { + LOGSTRING("CEasyDialingContactDataManager: Pbk2ImageGetComplete"); + TInt index = iWaitingContacts[0]; + LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]); + iWaitingContacts.Remove(0); + delete &aOperation; + iImageOperation = NULL; + delete iStoreContact; + iStoreContact = NULL; + + TRAPD(err, DoHandleImageGetCompleteL(aBitmap, index)); + if (err) + { + HandleError(err); + } + LOGSTRING("CEasyDialingContactDataManager: Pbk2ImageGetComplete Exit"); + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::PbkImageGetFailed +// From MPbkImageGetObserver +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::Pbk2ImageGetFailed(MPbk2ImageOperation& aOperation, TInt /*aError*/) + { + LOGSTRING("CEasyDialingContactDataManager: Pbk2ImageGetFailed"); + Pbk2ImageGetComplete(aOperation, NULL); + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::DoHandleImageGetCompleteL +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::DoHandleImageGetCompleteL(CFbsBitmap* aBitmap, TInt aIndex) + { + LOGSTRING("CEasyDialingContactDataManager: DoHandleImageGetCompleteL"); + CEasyDialingContactData *tn = iContactDataArray[aIndex]; + tn->LoadingComplete(); + if (aBitmap) + { + tn->SetThumbnail(aBitmap); + } + + LoadNextContactDataL(); + InformObserver(); + LOGSTRING("CEasyDialingContactDataManager: DoHandleImageGetCompleteL Exit"); + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::Reset +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::Reset() + { + LOGSTRING("CEasyDialingContactDataManager: Reset"); + delete iImageOperation; + iImageOperation = NULL; + delete iContactOperation; + iContactOperation = NULL; + delete iStoreContact; + iStoreContact = NULL; + iWaitingContacts.Reset(); + iContactDataArray.ResetAndDestroy(); + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::VoiceCallAvailable +// --------------------------------------------------------------------------- +// +TBool CEasyDialingContactDataManager::VoiceCallAvailable( TInt aIndex ) + { + LOGSTRING("CEasyDialingContactDataManager: VoiceCallAvailable"); + + TBool ret( EFalse ); + + if( aIndex >= 0 ) + { + // If the parsed index is valid, return the availability. + ret = iContactDataArray[ aIndex ]->VoiceCallAvailable(); + } + + LOGSTRING1("CEasyDialingContactDataManager: VoiceCallAvailable returns %d", ret); + return ret; + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::VideoCallAvailable +// --------------------------------------------------------------------------- +// +TBool CEasyDialingContactDataManager::VideoCallAvailable( TInt aIndex ) + { + LOGSTRING("CEasyDialingContactDataManager: VideoCallAvailable"); + + TBool ret( EFalse ); + + if( aIndex >= 0 ) + { + // If the parsed index is valid, return the availability. + ret = iContactDataArray[ aIndex ]->VideoCallAvailable(); + } + + LOGSTRING1("CEasyDialingContactDataManager: VideoCallAvailable returns %d", ret); + return ret; + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::UniEditorAvailable +// --------------------------------------------------------------------------- +// +TBool CEasyDialingContactDataManager::UniEditorAvailable( TInt aIndex ) + { + LOGSTRING("CEasyDialingContactDataManager: UniEditorAvailable"); + + TBool ret( EFalse ); + + if( aIndex >= 0 ) + { + // If the parsed index is valid, return the availability. + ret = iContactDataArray[ aIndex ]->UniEditorAvailable(); + } + + LOGSTRING1("CEasyDialingContactDataManager: UniEditorAvailable returns %d", ret); + return ret; + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::ContactLinkLC +// --------------------------------------------------------------------------- +// +HBufC8* CEasyDialingContactDataManager::ContactLinkLC( TInt aIndex ) + { + LOGSTRING( "CEasyDialingContactDataManager: ContactLinkLC" ); + + if( aIndex >= 0 ) + { + // If the parsed index is valid, return the availability. + return iContactDataArray[ aIndex ]->ContactLink()->PackLC(); + } + else + { + return NULL; + } + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::HandleError +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::HandleError(TInt /*aError*/) + { + LOGSTRING("CEasyDialingContactDataManager: HandleError"); + // Something went wrong, but there is no need to panic. + // Cancel async operations and notify observer that we are done. + iWaitingContacts.Reset(); + delete iImageOperation; + iImageOperation = NULL; + delete iContactOperation; + iContactOperation = NULL; + if (iObserver) + { + iObserver->AllContactDataLoaded(); + } + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::StoreReady +// from MVPbkContactStoreObserver +// Called when the contact store is ready to be used, signals +// the next engine state. +// @param aContactStore The store that is ready. +// --------------------------------------------------------------------------- +// + +void CEasyDialingContactDataManager::StoreReady( MVPbkContactStore& /*aContactStore*/ ) + { + // next open the favourites view + TRAPD( err, iVPbkTopContactManager->GetTopContactsViewL( *this, *this ) ); + if ( err ) + { + HandleError( err ); + } + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::StoreUnavailable +// from MVPbkContactStoreObserver +// Called when a contact store becomes unavailable. +// @param aContactStore The store that became unavailable. +// @param aReason The reason why the store is unavailable. +// This is one of the system wide error codes. +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::StoreUnavailable( MVPbkContactStore& /*aContactStore*/, + TInt /*aReason*/ ) + { + // Opening main contact database failed. Easydialing can operate without + // it, but thumbnails and favourite stars can't be shown, and availability + // of action menu items can't be checked. + // Of course, if easydialing can't open the database, probably PCSServer + // can't open it either... + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::HandleStoreEventL +// from MVPbkContactStoreObserver +// Called when changes occur in the contact store. +// IGNORED. +// @param aContactStore A store whose event it is. +// @param aStoreEvent The event that has occurred. +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::HandleStoreEventL(MVPbkContactStore& /*aContactStore*/, + TVPbkContactStoreEvent /*aStoreEvent*/) + { + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::VPbkOperationFailed +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::VPbkOperationFailed( + MVPbkContactOperationBase* /*aOperation*/, + TInt /*aError*/ ) + { + // Loading list of favourite contacts failed. + // Continue as if none of the contacts are favourited. + delete iFavsOperation; + iFavsOperation = NULL; + delete iFavsView; + iFavsView = NULL; + + InitReady(); + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::VPbkOperationResultCompleted +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::VPbkOperationResultCompleted( + MVPbkContactOperationBase* /*aOperation*/, + MVPbkContactViewBase* aOperationResult ) + { + delete iFavsOperation; + iFavsOperation = NULL; + delete iFavsView; + iFavsView = aOperationResult; + + InitReady(); + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::DoHandleContactOperationCompleteL +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::DoHandleContactOperationCompleteL( + MVPbkStoreContact* aContact, TInt aIndex) + { + LOGSTRING("CEasyDialingContactDataManager: DoHandleContactOperationCompleteL"); + if (aContact) + { + + __ASSERT_DEBUG((!iStoreContact && !iImageOperation), User::Panic(_L("CEasyDialingContactDataManager"), 1)); + iStoreContact = aContact; + + // Find out the available communication methods for the contact. + GetAvailableServicesL( aContact, aIndex ); + + + // Next initiate async thumbnail get operation. + + if(GetContactThumbnailSetting()) // reads the iContactThumbnailSetting value if it is false we dont fetch images + { + if (iImageManager->HasImage(*iStoreContact, *iThumbnailFieldType)) + { + iImageOperation = iImageManager->GetImageAsyncL( + &iImageManagerParams, + *iStoreContact, + *iThumbnailFieldType, + *this); + } + } + if (!iImageOperation) + { + CEasyDialingContactData *tn = iContactDataArray[aIndex]; + tn->LoadingComplete(); + LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]); + iWaitingContacts.Remove(0); + delete iStoreContact; + iStoreContact = NULL; + LoadNextContactDataL(); + InformObserver(); + } + } + else + { + // Protective coding. If aContact is NULL, act like opening the contact link failed. + CEasyDialingContactData *tn = iContactDataArray[aIndex]; + tn->LoadingComplete(); + LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]); + iWaitingContacts.Remove(0); + LoadNextContactDataL(); + InformObserver(); + } + LOGSTRING("CEasyDialingContactDataManager: DoHandleContactOperationCompleteL Exit"); + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::GetAvailableServicesL +// +// Reads from parameter contact which services, i.e. communication methods, +// can be used with this contact. +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::GetAvailableServicesL( MVPbkStoreContact* aContact, TInt aIndex ) + { + LOGSTRING1("CEasyDialingContactDataManager: GetAvailableServicesL index = %d", aIndex); + TVPbkStoreContactAnalyzer analyzer( *iContactManager, aContact ); + + CEasyDialingContactData* contactData = iContactDataArray[aIndex]; + + // Voice call is available if either circuit-switched call or voip call is available. + TBool csdCall = (analyzer.HasFieldL( VPbkFieldTypeSelectorFactory::EVoiceCallSelector ) != KErrNotFound); + TBool voipCall = (analyzer.HasFieldL( VPbkFieldTypeSelectorFactory::EVOIPCallSelector ) != KErrNotFound); + + contactData->SetVoiceCallAvailable( csdCall || voipCall ); + + contactData->SetVideoCallAvailable( + analyzer.HasFieldL( VPbkFieldTypeSelectorFactory::EVideoCallSelector ) != KErrNotFound ); + + contactData->SetUniEditorAvailable( + analyzer.HasFieldL( VPbkFieldTypeSelectorFactory::EUniEditorSelector ) != KErrNotFound ); + + LOGSTRING("CEasyDialingContactDataManager: GetAvailableServicesL Exit"); + } + + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::VPbkSingleContactOperationComplete +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::VPbkSingleContactOperationComplete( + MVPbkContactOperationBase& aOperation, + MVPbkStoreContact* aContact ) + { + LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationComplete"); + delete &aOperation; + iContactOperation = NULL; + TInt index = iWaitingContacts[0]; + LOGSTRING1("VPbkSingleContactOperationComplete, Index=%d", index); + TRAPD(err, DoHandleContactOperationCompleteL(aContact, index)); + if (err) + { + HandleError(err); + } + LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationComplete Exit"); + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::VPbkSingleContactOperationFailed +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::VPbkSingleContactOperationFailed( + MVPbkContactOperationBase& /*aOperation*/, + TInt aError ) + { + LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationFailed"); + delete iContactOperation; + iContactOperation = NULL; + HandleError(aError); + LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationFailed Exit"); + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::InformObserver +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::InformObserver() + { + if (iObserver && !iWaitingContacts.Count()) + { + iObserver->AllContactDataLoaded(); + } + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::SetContactThumbnailSetting +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::SetContactThumbnailSetting( TInt aContactThumbnailSetting ) + { + iContactThumbnailSetting = aContactThumbnailSetting; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::GetContactThumbnailSetting +// --------------------------------------------------------------------------- +// +TBool CEasyDialingContactDataManager::GetContactThumbnailSetting( ) + { + return iContactThumbnailSetting; + } + +// --------------------------------------------------------------------------- +// CEasyDialingContactDataManager::Reload +// --------------------------------------------------------------------------- +// +void CEasyDialingContactDataManager::Reload( ) + { + LOGSTRING("CEasyDialingContactDataManager: Reload"); + for ( TInt i = 0 ; i < iContactDataArray.Count() ; i++ ) + { + iContactDataArray[ i ]->DeleteThumbnail(); + } + } + +// TODO: open item: sorting of favourites + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/src/easydialinglistbox.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/src/easydialinglistbox.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,537 @@ +/* +* 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: Easy dialing list box. +* +*/ + + +// INCLUDE FILES + +#include "easydialinglistbox.h" +#include "easydialinglistboxview.h" +#include "easydialinglistboxitemdrawer.h" +#include "easydialinglistboxdata.h" +#include "easydialingpanics.h" +#include "easydialingcontactdatamanager.h" +#include "easydialingcrkeys.h" + +#include + +#include +#include +#include + +#include + +// AvKON and drawing header files + +#include +#include // Required for touch +#include +#include // tooltips + +#include +#include +#include +#include +#include // for BaflUtils + +#include +#include +#include + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +extern TRect ContactImageBoundingBox( const TRect& aItemRect ); +extern TRect ActionMenuIconBoundingBox(const TRect& aItemRect); + +// CONSTANTS +static const TInt KListBoxMarginWidth = 2; +static const TInt KMaxVisibleItemsPortrait = 3; +static const TInt KMaxVisibleItemsLandscape = 2; + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + + +/* + * ============================================================================== + * + * + * class CEasyDialingListBox + * + * + * ============================================================================== + */ + + +// ----------------------------------------------------------------------------- +// CEasyDialingListBox +// +// ----------------------------------------------------------------------------- +// +CEasyDialingListBox::CEasyDialingListBox() : + CEikFormattedCellListBox() + { + } + +// ----------------------------------------------------------------------------- +// ~CEasyDialingListBox +// +// ----------------------------------------------------------------------------- +// +CEasyDialingListBox::~CEasyDialingListBox() + { + delete iBGContext; + delete iLongTapDetector; + } + +// ----------------------------------------------------------------------------- +// ConstructL +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBox::ConstructL( TInt aFlags, + CEasyDialingContactDataManager* aContactDataManager ) + { + CEikFormattedCellListBox::ConstructL( NULL, aFlags ); + + iLongTapDetector = CAknLongTapDetector::NewL( this ); + + CEasyDialingListBoxItemDrawer* drawer = static_cast (iItemDrawer); + CEasyDialingListBoxData* data = drawer->EasyDialingCellData(); + data->SetContactDataManager(aContactDataManager); + data->SetEDLBXControl(this); + + iBGContext = CAknsFrameBackgroundControlContext::NewL( KAknsIIDQsnFrPopupSub, + Rect(), Rect(), EFalse ); + + // ContactDataManager is accessed from SizeChanged. If list item size + // changes -> thumbnail size changes + iContactDataManager = aContactDataManager; + + drawer->SetColors(); + + CreateScrollBarFrameL( ETrue ); + ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); + } + + +// ----------------------------------------------------------------------------- +// MakeViewClassInstanceL +// +// ----------------------------------------------------------------------------- +// +CListBoxView* CEasyDialingListBox::MakeViewClassInstanceL() + { + return (new ( ELeave ) CEasyDialingListBoxView); + } + + +// ----------------------------------------------------------------------------- +// ItemDrawer +// +// ----------------------------------------------------------------------------- +// +CEasyDialingListBoxItemDrawer* CEasyDialingListBox::ItemDrawer() const + { + return (CEasyDialingListBoxItemDrawer*) iItemDrawer; + } + + +// ----------------------------------------------------------------------------- +// FocusChanged +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBox::FocusChanged( TDrawNow aDrawNow ) + { + if ( !IsFocused() ) + { + CEasyDialingListBoxView* view = static_cast( iView ); + view->SetCurrentItemIndexToNone(); + + // Invalidate window area. + // This fixes the drawing problem that the top + // of listbox is not always redrawn on the area that overlaps + // the status pane area. + // TODO: This overlapping no longer happens in 9.2 so this may + // now be unnecessary. + Window().Invalidate(); + } + CEikFormattedCellListBox::FocusChanged( aDrawNow ); + } + + +// ----------------------------------------------------------------------------- +// CreateItemDrawerL +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBox::CreateItemDrawerL() + { + CEasyDialingListBoxData* celldata = CEasyDialingListBoxData::NewL(); + CleanupStack::PushL( celldata ); + iItemDrawer = new(ELeave) CEasyDialingListBoxItemDrawer(Model(), iEikonEnv->NormalFont(), celldata); + CleanupStack::Pop( celldata ); + } + + +// ----------------------------------------------------------------------------- +// Draw +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBox::Draw(const TRect& aRect) const + { + MAknListBoxTfxInternal *transApi = CAknListLoader::TfxApiInternal( iItemDrawer->Gc() ); + if ( transApi ) + { + transApi->SetListType( MAknListBoxTfxInternal::EListBoxTypeMainPane ); + transApi->BeginRedraw( MAknListBoxTfxInternal::EListView, this->Rect() ); + } + + if (!iView->RedrawDisabled() ) + { + TRect clientRect( Rect() ); + TRect viewRect = iView->ViewRect(); + + if ( transApi ) + { + transApi->StartDrawing( MAknListBoxTfxInternal::EListView ); + } + + AknsDrawUtils::BackgroundBetweenRects( + AknsUtils::SkinInstance(), + iBGContext, + this, + *iItemDrawer->Gc(), + clientRect, + viewRect ); + + if ( transApi ) + { + transApi->StopDrawing(); + } + } + + if ( iModel->NumberOfItems() ) + { + // Draw the actual list + iView->Draw(&aRect); + } + if ( transApi ) + { + transApi->EndViewRedraw( aRect ); + } + } + + +// ----------------------------------------------------------------------------- +// HandleResourceChange +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBox::HandleResourceChange(TInt aType) + { + CEikFormattedCellListBox::HandleResourceChange( aType ); + iSBFrame->VerticalScrollBar()->HandleResourceChange( aType ); + iSBFrame->DrawScrollBarsNow(); + ItemDrawer()->SetColors(); + + // Base call to HandleResourceChange justifies the list to even items + // on the top. This causes problems when listbox height is not a multiple of + // listitem heights. Fix scrolling manually for these cases. + TRAP_IGNORE( HandleItemAdditionL() ); // needed to prevent drawing problems + TInt scrollIndex = ( IsFocused() ? CurrentItemIndex() : iNumberOfNames - 1 ); + ScrollToMakeItemVisible( scrollIndex ); + + DrawDeferred(); + } + + +// ----------------------------------------------------------------------------- +// SizeChanged +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBox::SizeChanged() + { + CEikFormattedCellListBox::SizeChanged(); + + // Set the listbox colors. + // For some reason, calling this in HandleResourceChange is not enough, it does + // not get called in situation it should. + ItemDrawer()->SetColors(); + + // resize scroll bar + if ( iSBFrame ) + { + TAknLayoutRect rect; + TInt variety = ( Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0 ); + + TAknWindowComponentLayout viewLayout( AknLayoutScalable_Apps::dia3_list_pane( variety ) ); + rect.LayoutRect( Rect(), viewLayout ); + TRect viewRect( rect.Rect() ); + // Add a bit of margin around the view as layout doesn't define any + viewRect.Shrink( KListBoxMarginWidth, KListBoxMarginWidth ); + + TAknWindowComponentLayout scrollBarLayout( AknLayoutScalable_Apps::scroll_pane_cp12() ); + rect.LayoutRect( Rect(), scrollBarLayout ); + TRect scrollBarRect( rect.Rect() ); + + iView->SetViewRect( viewRect ); + + CAknDoubleSpanScrollBar* scrollbar = static_cast ( iSBFrame->VerticalScrollBar() ); + + scrollbar->SetFixedLayoutRect( scrollBarRect ); + scrollbar->SetRect( scrollBarRect ); + + TRect viewAndScrollBarRect( viewRect ); + + if ( AknLayoutUtils::LayoutMirrored() ) + { + viewAndScrollBarRect.iTl = scrollBarRect.iTl; + } + else + { + viewAndScrollBarRect.iBr = scrollBarRect.iBr; + } + iBGContext->SetFrameRects( Rect(), viewAndScrollBarRect ); + } + } + + +// ----------------------------------------------------------------------------- +// MopSupplyObject +// +// ----------------------------------------------------------------------------- +// +TTypeUid::Ptr CEasyDialingListBox::MopSupplyObject( TTypeUid aId ) + { + if ( aId.iUid == MAknsControlContext::ETypeId && iBGContext ) + { + return MAknsControlContext::SupplyMopObject( aId, iBGContext ); + } + return CEikFormattedCellListBox::MopSupplyObject( aId ); + } + +// ----------------------------------------------------------------------------- +// MakeVisible +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBox::MakeVisible( TBool aVisible ) + { + if ( aVisible != IsVisible() ) + { + CEikFormattedCellListBox::MakeVisible( aVisible ); + if ( iSBFrame ) + { + CEikScrollBar* sb = iSBFrame->GetScrollBarHandle( CEikScrollBar::EVertical ); + if ( sb ) + { + sb->MakeVisible( aVisible ); + if ( aVisible ) + { + UpdateScrollBarThumbs(); + } + } + } + } + } + +// ----------------------------------------------------------------------------- +// SetMaxRect +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBox::SetMaxRect( TRect aMaxRect ) + { + iMaxRect = aMaxRect; + + // Update the list item size according the maximum view rect size + TInt variety = ( Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0 ); + TAknLayoutRect maxViewLayout; + maxViewLayout.LayoutRect( aMaxRect, AknLayoutScalable_Apps::dia3_list_pane( variety ) ); + TRect maxViewRect( maxViewLayout.Rect() ); + maxViewRect.Shrink( KListBoxMarginWidth, KListBoxMarginWidth ); // layout data doens't include any margins but we have added some + + TInt maxItemsShown = ( variety ? KMaxVisibleItemsLandscape : KMaxVisibleItemsPortrait ); + TInt itemHeight = maxViewRect.Height() / maxItemsShown; + TRAP_IGNORE( SetItemHeightL( itemHeight ) ); + + // Calculate new thumbnail rect from item size + TSize itemSize( maxViewRect.Width(), itemHeight ); + TRect thumbnailRect = ContactImageBoundingBox( itemSize ); + iContactDataManager->SetThumbnailSize( thumbnailRect.Size() ); // reloads thumbnails if the new size is different from old one + + // Inform listbox data class about changed list item size + ItemDrawer()->EasyDialingCellData()->HandleItemSizeChange(); + } + +// ----------------------------------------------------------------------------- +// SetRectToNumberOfItems +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBox::SetRectToNumberOfItems( TInt aNumberOfNames ) + { + iNumberOfNames = aNumberOfNames; + + TRect listboxRect( iMaxRect ); + + // Make listbox smaller if maximum size is not needed to show + // all list items. + TInt requiredHeight = GetHeightBasedOnNumberOfItems( iNumberOfNames ); + if ( requiredHeight < listboxRect.Height() ) + { + // Shrink rect height so that bottom of the rect doesn't move + listboxRect.iTl.iY += ( listboxRect.Height() - requiredHeight ); + } + + SetRect( listboxRect ); + } + + + +// ----------------------------------------------------------------------------- +// SetFocusedWithKeyEventL +// ----------------------------------------------------------------------------- +// +TKeyResponse CEasyDialingListBox::SetFocusedWithKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) + { + TKeyResponse keyResponse = EKeyWasNotConsumed; + TInt keyCode = aKeyEvent.iCode; + + // Disable redrawing temporarily. + // This is because OfferKeyEventL puts the focus to the wrong item, + // and we don't want to show it flashing there. + // Make sure that no leave happens before redraw is enabled again. + iView->SetDisableRedraw( ETrue ); + + TRAP_IGNORE( keyResponse = OfferKeyEventL( aKeyEvent, aType ) ); + + TInt itemToFocus = ( keyCode == EKeyUpArrow ? iNumberOfNames - 1 : 0 ); + ScrollToMakeItemVisible( itemToFocus ); + SetCurrentItemIndex( itemToFocus ); + + iView->SetDisableRedraw( EFalse ); + + DrawDeferred(); + + return keyResponse; + } + + +// ----------------------------------------------------------------------------- +// GetHeightBasedOnNumberOfItems +// +// ----------------------------------------------------------------------------- +// +TInt CEasyDialingListBox::GetHeightBasedOnNumberOfItems( TInt aNum ) const + { + return ( ItemHeight()*aNum + KListBoxMarginWidth*2 ); + } + + +// ----------------------------------------------------------------------------- +// CurrentContactDataIndex +// +// ----------------------------------------------------------------------------- +// +TInt CEasyDialingListBox::CurrentContactDataIndex() + { + if ( CurrentItemIndex() >= 0 ) + { + TPtrC itemText = Model()->ItemText( CurrentItemIndex() ); + TPtrC indexText; + + TInt error = TextUtils::ColumnText( indexText , 0, &itemText ); + __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) ); + + TUint id( 0 ); + TLex lex( indexText ); + error = lex.Val( id, EHex ); + __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) ); + + return id; + } + else + { + return KErrNotFound; + } + } + +// ----------------------------------------------------------------------------- +// CurrentContactLinkLC +// +// ----------------------------------------------------------------------------- +// +HBufC8* CEasyDialingListBox::CurrentContactLinkLC() + { + TInt index = CurrentContactDataIndex(); + return iContactDataManager->ContactLinkLC( index ); + } + + +// ----------------------------------------------------------------------------- +// HandleLongTapEventL +// Callback from CAknLongTapDetector. +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBox::HandleLongTapEventL( const TPoint& /*aPenEventLocation*/, + const TPoint& /*aPenEventScreenLocation*/ ) + { + ReportListBoxEventL( static_cast + ( KEasyDialingContactLongTapped ) ); + iPointerLongPressHandled = ETrue; + } + + +// ----------------------------------------------------------------------------- +// HandlePointerEventL +// Pointer event handling within the EasyDialingListBox. +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBox::HandlePointerEventL(const TPointerEvent& aPointerEvent) + { + // Button down event starts new pointer press. Reset flags at this point. + if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) + { + iPointerLongPressHandled = EFalse; + } + + iLongTapDetector->PointerEventL(aPointerEvent); + if ( iPointerLongPressHandled ) + { + // No further handling is made after long tap on list item + // has been detected. + return; + } + + CEikFormattedCellListBox::HandlePointerEventL( aPointerEvent ); + } + + +// end of file + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/src/easydialinglistboxdata.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/src/easydialinglistboxdata.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,1319 @@ +/* +* 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: Easy dialing list box data. +* +*/ + + +// INCLUDE FILES + +#include "easydialinglistboxdata.h" +#include "easydialinglistbox.h" +#include "easydialinglistboxview.h" +#include "easydialinglistboxitemdrawer.h" +#include "easydialingpanics.h" + +#include "easydialingcontactdatamanager.h" +#include +#include +#include + +// AvKON and drawing header files +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// KHighlightSeparatorChar is character used to separate matching and non-matching +// portions of contact names. +const TInt KHighlightSeparatorChar = 0x1F; +_LIT( KHighlightSeparatorCharAsLit, "\x1F" ); + + +// KContactNameFontHeightPercent is contact name font height relative to list item height. +const TInt KContactNameFontHeightPercent = 35; + +// KCompanyNameFontHeightPercent is company name font height relative to list item height. +const TInt KCompanyNameFontHeightPercent = 30; + +// KTextBoundingBoxHeightPercent gives the text bounding box height in percentages +// 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 +// bottom. +const TInt KTextPlacementPercent = 70; + +// KMarginXPercent defines a width of horizontal margin used in many places. In relation to +// the width of the item rectangle. +const TInt KMarginXPercent = 2; + +// KMarginYPercent defines a height of vertical margin. In relation to +// the height of the item rectangle. Currently used only with contact thumbnail. +const TInt KMarginYPercent = 4; + +// KContacNameYOffsetPercent defines the vertical placement of contact name in relation to +// item height. +const TInt KContactNameYOffsetPercent = 10; + +// KCompanyNameYOffsetPercent defines the vertical placement of company name in relation to +// item height. +const TInt KCompanyNameYOffsetPercent = 60; + +// KArrowIconSizePercent defines the size of action menu icon relative to item height. +const TInt KArrowIconSizePercent = 20; + +// KMatchingTextMarginInPixels the absolute pixel width of highlight margin. Highlight margin +// is an extra space in highlight boundary to make the text look less crowded. +const TInt KMatchingTextMarginInPixels = 3; + +// KMatchingTextMarginInPixels is the absolute pixel value for rounding used in highlight +// rectangle. +const TInt KHighligthRectangleRoundingYInPixels = 4; + +// KThumbnailAspectRatio is the aspect ratio of contact thumbnail in percents. 133 for instance +// is 4:3 aspect ration. +const TInt KThumbnailAspectRatio = 133; + +const TInt KCent = 100; + +const TInt KMaxRunInfoArrayCount = 20; + +// IMPLEMENTATION SPECIFIC CONSTANTS +// The mif file from where you would like to show the +// icon on the screen. +_LIT( KFavouriteIconBitmapFile, "\\resource\\apps\\phonebook2.mif" ); +_LIT( KEasyDialingBitmapFile, "\\resource\\apps\\easydialing.mif" ); +_LIT( KPhonebook2EceBitmapFile, "\\resource\\apps\\phonebook2ece.mif" ); + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// GLOBAL FUNCTION PROTOTYPES +TRect ContactImageBoundingBox( const TRect& aItemRect ); +TRect ArrowIconBoundingBox(const TRect& aItemRect); + +// LOCAL FUNCTION PROTOTYPES +static TRect ContactNameBoundingBox( + const TRect& aItemRect, + const CFont* aContactNameFont, + TBool aIsCurrentItem, + TBool aIsFavourite, + TBool aThumbnailsShown ); +static TRect CompanyNameBoundingBox( + const TRect& aItemRect, + const CFont* aCompanyNameFont, + TBool aIsCurrentItem, + TBool aThumbnailsShown ); +static TRect FavouriteIconBoundingBox( const TRect& aContactNameBoundingBox, TInt aTextWidth ); +static TRect MirrorLayoutBoundingBox(const TRect& aSourceRect, TRect& aBoundingBoxRect); +static TInt BaseLineOffset( const TRect& aTextBoundingBox, const CFont* aFont ); +static TBool ContainsRightToLeftText( const TDesC& aDesc ); +static TInt HighlightSeparatorCount( const TDesC& aText ); +static HBufC* ConvertToVisualAndClipLC( const TDesC& aText, const CFont& aFont, const TRect& aBoundingBox ); + +static void ClipTextToWidth( + TDes& aText, + const CFont& aFont, + TInt aMaxWidthInPixels, + TBool& aMatch ); + +static TBool DrawPieceOfText( + const TRect& aBoundingBox, + TInt& aXOffset, + CWindowGc &aGc, + const TDesC& aText, + TBool aMatch, + const CFont* aFont, + const CEasyDialingListBoxData::TExtendedColors& aColors, + TBool aHighLight); + +static TInt DrawTextWithMatchHighlightL( + const TRect& aBoundingBox, + CWindowGc &aGc, + const TDesC& aText, + const CFont* aFont, + const CEasyDialingListBoxData::TExtendedColors& aColors, + TBool aHighLight ); + +static TInt CalculateTextWidth( + const TRect& aBoundingBox, + const TDesC& aText, + const CFont* aFont ); + +static TBool CalculateTextPieceWidth( + const TRect& aBoundingBox, + TInt& aXOffset, + const TDesC& aText, + TBool aMatch, + const CFont* aFont ); + +// FORWARD DECLARATIONS + + +/* + * ============================================================================== + * + * + * class EasyDialingListBoxData::TExtendedColors + * + * + * ============================================================================== + */ + + +// ----------------------------------------------------------------------------- +// TExtendedColors +// +// ----------------------------------------------------------------------------- +// +CEasyDialingListBoxData::TExtendedColors::TExtendedColors() : +CFormattedCellListBoxData::TColors(), +iMatchingText(KRgbBlack), +iMatchingBack(KRgbDarkYellow) + { + } + + +/* + * ============================================================================== + * + * + * class CEasyDialingListBoxData + * + * + * ============================================================================== + */ + + +// ----------------------------------------------------------------------------- +// CEasyDialingListBoxData +// +// ----------------------------------------------------------------------------- +// +CEasyDialingListBoxData::CEasyDialingListBoxData() : +CFormattedCellListBoxData() + { + } + +// ----------------------------------------------------------------------------- +// Destructor +// +// ----------------------------------------------------------------------------- +// +CEasyDialingListBoxData::~CEasyDialingListBoxData() + { + // Release fonts. ReleaseFont function can cope with null pointer + // so we don't need to null check them. + CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() ); + screenDev.ReleaseFont( iContactNameFont ); + screenDev.ReleaseFont( iCompanyNameFont ); + + delete iArrowPointingRight; + delete iArrowPointingLeft; + delete iColorBitmap; + delete iDummyThumbnail; + + iContactDataManager = NULL; + } + +// ----------------------------------------------------------------------------- +// NewL +// +// ----------------------------------------------------------------------------- +// +CEasyDialingListBoxData* CEasyDialingListBoxData::NewL() + { + CEasyDialingListBoxData* self = new (ELeave) CEasyDialingListBoxData(); + + CleanupStack::PushL( self ); + self->ConstructLD(); + CleanupStack::Pop( self ); + + return self; + } + + +// ----------------------------------------------------------------------------- +// DrawData +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxData::DrawData( + const TListItemProperties& aProperties, + CWindowGc& aGc, + const TDesC* aText, + const TRect& aRect, + TBool aHighlight, + const TExtendedColors& aColors ) const + { + const TRect &aItemRect = aRect; + + if ( aHighlight ) + { + DrawHighlight( aGc, aItemRect ); + } + + // Draw the actual items. + DrawDataFormatted( aProperties, aGc, aText, aItemRect, + aHighlight, aColors ); + } + + +// ----------------------------------------------------------------------------- +// ConstructLD +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxData::ConstructLD() + { + CFormattedCellListBoxData::ConstructLD(); + + // EasyDialing bitmap file is attempted to be read from the same directory where the + // executed binary is located + TFileName dllFileName; + Dll::FileName( dllFileName ); + + TParse parse; + User::LeaveIfError(parse.Set(KEasyDialingBitmapFile, &dllFileName, NULL)); + TFileName bitmapFileName(parse.FullName()); + + CFbsBitmap* bm; + CFbsBitmap* mask; + + // iArrowPointingLeft is the icon displayed for the selected item in EasyDialingListBox + AknIconUtils::CreateIconL( bm, mask, bitmapFileName, EMbmEasydialingQgn_indi_org_arrow_left, + EMbmEasydialingQgn_indi_org_arrow_left_mask ); + + iArrowPointingLeft = CGulIcon::NewL( bm, mask ); + + AknIconUtils::CreateIconL( bm, mask, bitmapFileName, EMbmEasydialingQgn_indi_org_arrow_right, + EMbmEasydialingQgn_indi_org_arrow_right_mask ); + + iArrowPointingRight = CGulIcon::NewL( bm, mask ); + + // Only mask for the icons are used. iColorBitmap is used for making the icon + // to follow text color changes according to skin. + iColorBitmap = new (ELeave) CFbsBitmap; + + // Contact default thumbnail is not available in themes. It is read from phonebook resource. + AknIconUtils::CreateIconL( bm, mask, KPhonebook2EceBitmapFile, + EMbmPhonebook2eceQgn_prop_pb_thumb_unknown, EMbmPhonebook2eceQgn_prop_pb_thumb_unknown_mask ); + iDummyThumbnail = CGulIcon::NewL( bm, mask ); + + } + + +// ----------------------------------------------------------------------------- +// DrawHighlight +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxData::DrawHighlight( CWindowGc &aGc, const TRect &aItemRect ) const + { + MAknListBoxTfxInternal* transApi = CAknListLoader::TfxApiInternal( &aGc ); + if ( transApi ) + { + transApi->Invalidate(MAknListBoxTfxInternal::EListHighlight ); + transApi->BeginRedraw( MAknListBoxTfxInternal::EListHighlight, aItemRect ); + transApi->StartDrawing( MAknListBoxTfxInternal::EListHighlight ); + aGc.SetClippingRect( iControl->Rect() ); + } + + TAknLayoutRect outerRect; + TAknLayoutRect innerRect; + outerRect.LayoutRect( aItemRect, TAknWindowComponentLayout::Compose( + AknLayoutScalable_Avkon::list_highlight_pane_cp1(), + AknLayoutScalable_Avkon::list_highlight_pane_g10_cp1() ).LayoutLine() ); + innerRect.LayoutRect( aItemRect, TAknWindowComponentLayout::Compose( + AknLayoutScalable_Avkon::list_highlight_pane_cp1(), + AknLayoutScalable_Avkon::list_highlight_pane_g1_cp1() ).LayoutLine() ); + MAknsControlContext *cc = AknsDrawUtils::ControlContext( Control() ); + + if ( !cc ) + { + cc = SkinBackgroundContext(); + } + + if ( cc ) + { + aGc.SetPenStyle( CGraphicsContext::ENullPen ); + AknsDrawUtils::DrawFrame( + AknsUtils::SkinInstance(), + aGc, + outerRect.Rect(), + innerRect.Rect(), + KAknsIIDQsnFrList, + KAknsIIDQsnFrListCenter ); + } + + if ( transApi ) + { + aGc.CancelClippingRect(); + transApi->StopDrawing(); + transApi->EndRedraw( MAknListBoxTfxInternal::EListHighlight ); + } + } + + +// ----------------------------------------------------------------------------- +// DrawDataFormatted +// +// ----------------------------------------------------------------------------- +// +// ToDo: SetSize function could be called once for all static data in SizeChanged. +// Applies at least to icons. +void CEasyDialingListBoxData::DrawDataFormatted( + TListItemProperties /* aProperties */, + CWindowGc& aGc, + const TDesC* aText, + const TRect& aItemRect, + TBool aHighlight, + const TExtendedColors& aColors ) const + { + TPtrC cellText; + + TInt error = TextUtils::ColumnText( cellText , 0, aText ); + __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) ); + __ASSERT_DEBUG( iContactNameFont, EasyDialingPanic( EEasyDialingNoFontFound ) ); + __ASSERT_DEBUG( iCompanyNameFont, EasyDialingPanic( EEasyDialingNoFontFound ) ); + + MAknListBoxTfxInternal *transApi = CAknListLoader::TfxApiInternal( &aGc ); + if ( transApi ) + { + transApi->StartDrawing( MAknListBoxTfxInternal::EListItem ); + if ( transApi->EffectsDisabled() ) + { + aGc.SetClippingRect( iControl->Rect() ); + } + } + + TRect boundingBox = ContactImageBoundingBox( aItemRect ); + if ( AknLayoutUtils::LayoutMirrored() ) + { + boundingBox = MirrorLayoutBoundingBox( aItemRect, boundingBox ); + } + + //Draws the Contact Thumbnail Icon if exists else draws the dummy contact thumbnail + TBool fav = ContactThumbnailDrawing( aGc, boundingBox, cellText ); + + error = TextUtils::ColumnText( cellText , 1, aText ); + __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) ); + + boundingBox = ContactNameBoundingBox( aItemRect, + iContactNameFont, + aHighlight, + fav, + iContactDataManager->GetContactThumbnailSetting() ); + TRect nameRectUnMirrored = boundingBox; // used for favourite star drawing + + if ( AknLayoutUtils::LayoutMirrored() ) + { + boundingBox = MirrorLayoutBoundingBox( aItemRect, boundingBox ); + } + + // favourite icon size is set the same as contact name bounding box height. + TInt favouriteIconSize = boundingBox.Height(); + + TRect arrowRect = ArrowIconBoundingBox( aItemRect ); + if ( AknLayoutUtils::LayoutMirrored() ) + { + arrowRect = MirrorLayoutBoundingBox( aItemRect, arrowRect ); + } + + // Draw arrow icon if the item is in focus. + if ( aHighlight ) + { + DrawArrowIcon( aGc, arrowRect ); + } + + TInt textWidth( 0 ); + TInt err( KErrNone ); + TRAP( err, textWidth = DrawTextWithMatchHighlightL( + boundingBox, aGc, cellText, iContactNameFont, aColors, aHighlight ) ); + + if ( !err && TextUtils::ColumnText( cellText , 2, aText ) == KErrNone ) + { + TRect companyNameBoundingBox = CompanyNameBoundingBox( + aItemRect, iCompanyNameFont, aHighlight, iContactDataManager->GetContactThumbnailSetting() ); + if ( AknLayoutUtils::LayoutMirrored() ) + { + companyNameBoundingBox = MirrorLayoutBoundingBox( aItemRect, companyNameBoundingBox ); + } + TRAP( err, DrawTextWithMatchHighlightL( + companyNameBoundingBox, aGc, cellText, iCompanyNameFont, aColors, aHighlight ) ); + } + + if ( !err && fav ) + { + // Draws the Favourite Icon + DrawFavouriteIcon( aGc, nameRectUnMirrored, textWidth, aItemRect ); + } + + if ( transApi ) + { + aGc.CancelClippingRect(); + transApi->StopDrawing(); + } + } + +// ----------------------------------------------------------------------------- +// ContactThumbnailDrawing +// +// Draws the Contact Thumbnail Icon if any else draws the dummy contact thumbnail +// ----------------------------------------------------------------------------- + +TBool CEasyDialingListBoxData::ContactThumbnailDrawing(CWindowGc& aGc, TRect aBoundingBox, TPtrC aCellText) const + { + TBool fav(EFalse); + CFbsBitmap* thumbnail(NULL); + TBool isLoaded = iContactDataManager->GetThumbnailAndFav(aCellText, thumbnail, fav); + if ( isLoaded && thumbnail ) + { + // center the thumbnail in its rect + TSize size(thumbnail->SizeInPixels()); + TInt xOffset = (aBoundingBox.Width() - size.iWidth) / 2; + TInt yOffset = (aBoundingBox.Height() - size.iHeight) / 2; + TPoint tl(aBoundingBox.iTl.iX + xOffset, aBoundingBox.iTl.iY + yOffset); + TRect sourceRect( TPoint(0,0),size); + aGc.BitBlt(tl, thumbnail, sourceRect); + } + else if ( isLoaded && iContactDataManager->GetContactThumbnailSetting() ) + { + // draw dummy thumnbnail, but only if we know that the contact doesn't + // have a thumbnail, and thumbnail drawing is enabled. + AknIconUtils::SetSize(iDummyThumbnail->Bitmap(), aBoundingBox.Size()); + AknIconUtils::SetSize(iDummyThumbnail->Mask(), aBoundingBox.Size()); + aGc.BitBltMasked( aBoundingBox.iTl, iDummyThumbnail->Bitmap(), + TRect( TPoint(0,0), aBoundingBox.Size() ), + iDummyThumbnail->Mask(), ETrue ); + } + return fav; + } + + +// ----------------------------------------------------------------------------- +// DrawArrowIcon +// Draws the Action Menu +// ----------------------------------------------------------------------------- +void CEasyDialingListBoxData::DrawArrowIcon( + CWindowGc& aGc, TRect aArrowRect) const + { + // Action Menu Arrow for opening the Action Menu + if ( AknLayoutUtils::LayoutMirrored() ) + { + // For mirrored layout the UI logic is mirrored as well + AknIconUtils::SetSize( iArrowPointingLeft->Mask(), aArrowRect.Size() ); + aGc.BitBltMasked( aArrowRect.iTl, iColorBitmap, + TRect( TPoint(0,0), aArrowRect.Size() ), + iArrowPointingLeft->Mask(), ETrue ); + + } + else + { + AknIconUtils::SetSize( iArrowPointingRight->Mask(), aArrowRect.Size() ); + aGc.BitBltMasked( aArrowRect.iTl, iColorBitmap, + TRect( TPoint(0,0), aArrowRect.Size() ), + iArrowPointingRight->Mask(), ETrue ); + } + } + +// ----------------------------------------------------------------------------- +// DrawFavouriteIcon +// +// Draws the Favourite Icon +// ----------------------------------------------------------------------------- +void CEasyDialingListBoxData::DrawFavouriteIcon( + CWindowGc& aGc, + TRect aNameRectUnMirrored, + TInt aTextWidth, + TRect aEffectiveRect) const + { + CFbsBitmap* favouriteIcon; + CFbsBitmap* favouriteIconMask; + TRect favouriteIconBoundingBox; + + favouriteIconBoundingBox = FavouriteIconBoundingBox( aNameRectUnMirrored, aTextWidth ); + + if ( AknLayoutUtils::LayoutMirrored() ) + { + favouriteIconBoundingBox = MirrorLayoutBoundingBox(aEffectiveRect, favouriteIconBoundingBox); + } + + aGc.SetBrushStyle( CGraphicsContext::ENullBrush ); + TRect sourceRect( TPoint(0,0), favouriteIconBoundingBox.Size() ); + + if( AknsUtils::SkinInstance()->GetCachedItemData(KAknsIIDQgnFsContactsFavorite) ) + { + AknsDrawUtils::DrawCachedImage( AknsUtils::SkinInstance(), aGc, sourceRect, + KAknsIIDQgnFsContactsFavorite ); + } + else + { + // Create the bitmap and mask to draw. + TRAP_IGNORE( AknIconUtils::CreateIconL(favouriteIcon, favouriteIconMask, KFavouriteIconBitmapFile, + EMbmPhonebook2Qgn_prop_pb_topc, EMbmPhonebook2Qgn_prop_pb_topc_mask )); + + // Set size for the bitmap and mask + AknIconUtils::SetSize(favouriteIcon, favouriteIconBoundingBox.Size()); + AknIconUtils::SetSize(favouriteIconMask, favouriteIconBoundingBox.Size()); + aGc.BitBltMasked( favouriteIconBoundingBox.iTl , favouriteIcon, sourceRect, favouriteIconMask, ETrue); + } + } +// ----------------------------------------------------------------------------- +// SetContactDataManager +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxData::SetContactDataManager(CEasyDialingContactDataManager* aContactDataManager) + { + iContactDataManager = aContactDataManager; + } + +// ----------------------------------------------------------------------------- +// HandleItemSizeChange +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxData::HandleItemSizeChange() + { + TInt height = iControl->ItemHeight(); + TSize size( height, height ); + TRAP_IGNORE( UpdateColorBitmapL( size ) ); + + // Obtain fonts. + ObtainFonts( height ); + + // TODO: also bounding boxes could be updated and stored here + } + +// ----------------------------------------------------------------------------- +// ObtainFonts +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxData::ObtainFonts( TInt aItemHeight ) + { + CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() ); + + // Release previous fonts. ReleaseFont function can cope with null pointers + // so we don't need to null check them. + screenDev.ReleaseFont( iContactNameFont ); + screenDev.ReleaseFont( iCompanyNameFont ); + + // Get a logical font to a basis for our own fonts. + const CFont* logicalFont = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); + + // Extract font information + TFontSpec fontSpec = logicalFont->FontSpecInTwips(); + + // Calculate contact name font height in TWIPs. + TInt fontHeightPixels = aItemHeight * KContactNameFontHeightPercent / KCent; + TInt fontHeightTwips = screenDev.VerticalPixelsToTwips( fontHeightPixels ); + + // Set height, weight, and posture. + fontSpec.iHeight = fontHeightTwips; + fontSpec.iFontStyle.SetStrokeWeight( EStrokeWeightBold ); + fontSpec.iFontStyle.SetPosture( EPostureUpright ); + + // Obtain contact name font + TInt err = screenDev.GetNearestFontToDesignHeightInTwips( iContactNameFont, fontSpec ); + __ASSERT_DEBUG( err == KErrNone, EasyDialingPanic( EEasyDialingNoFontFound ) ); + + // Calculate company name font height in TWIPs. + fontHeightPixels = aItemHeight * KCompanyNameFontHeightPercent / KCent; + fontHeightTwips = screenDev.VerticalPixelsToTwips( fontHeightPixels ); + fontSpec.iHeight = fontHeightTwips; + fontSpec.iFontStyle.SetStrokeWeight( EStrokeWeightNormal ); + + // Obtain company name font. + err = screenDev.GetNearestFontToDesignHeightInTwips( iCompanyNameFont, fontSpec ); + __ASSERT_DEBUG( err == KErrNone, EasyDialingPanic( EEasyDialingNoFontFound ) ); + } + + +// ----------------------------------------------------------------------------- +// UpdateColorBitmapL +// ColorBitmap is redrawn when UI layout or text color (Theme) changes +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxData::UpdateColorBitmapL( const TSize& aSize ) + { + TRgb color; + // Get the HighLighted text color in ListBox from the Theme + AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), color, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG10 ); + + // Create a bitmap with the similar display mode than what the device currently + // uses for using it as an offscreen bitmap + AknIconConfig::TPreferredDisplayMode mode; + AknIconConfig::PreferredDisplayMode( mode, AknIconConfig::EImageTypeOffscreen ); + User::LeaveIfError( iColorBitmap->Create( aSize, mode.iBitmapMode ) ); + + // Create a new drawing device and graphics context for enabling drawing to + // the offscreen bitmap + CFbsBitmapDevice* destinationDevice = CFbsBitmapDevice::NewL( iColorBitmap ); + CleanupStack::PushL(destinationDevice); + + CFbsBitGc* destinationGc; + User::LeaveIfError( destinationDevice->CreateContext( destinationGc ) ); + + // Set the color and style for pen and brush and draw a rectangle to the + // bitmap graphics + destinationGc->SetPenColor( color ); + destinationGc->SetPenStyle( CGraphicsContext::ESolidPen ); + destinationGc->SetBrushColor( color ); + destinationGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); + destinationGc->DrawRect( TRect( TPoint( 0,0 ), aSize ) ); + + // Colorbitmap is ready, cleanup + delete destinationGc; + CleanupStack::PopAndDestroy(destinationDevice); + } + +// ----------------------------------------------------------------------------- +// SetEDLBXControl +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxData::SetEDLBXControl(CEasyDialingListBox* aControl) + { + iControl = aControl; + } + + +/* + * ============================================================================== + * + * Local functions + * + * ============================================================================== + */ + + +// ----------------------------------------------------------------------------- +// ContactImageBoundingBox +// Calculates the area where contact thumbnail is confined +// ----------------------------------------------------------------------------- +// +TRect ContactImageBoundingBox(const TRect& aItemRect) + { + TInt leftMargin = aItemRect.Width() * KMarginXPercent / KCent; + TInt topMargin = KMarginYPercent * aItemRect.Height() / KCent; + TInt bottomMargin = topMargin; + TInt width = ((aItemRect.Height() - topMargin - bottomMargin) * KThumbnailAspectRatio) / KCent; + + return TRect( + aItemRect.iTl.iX + leftMargin, + aItemRect.iTl.iY + topMargin, + aItemRect.iTl.iX + leftMargin + width, + aItemRect.iBr.iY - bottomMargin); + } + +// ----------------------------------------------------------------------------- +// ContactNameBoundingBox +// Calculates the area to which the contact name and possible match highlights +// are confined. +// +// ----------------------------------------------------------------------------- +// +static TRect ContactNameBoundingBox( + const TRect& aItemRect, + const CFont* aContactNameFont, + TBool aIsCurrentItem, + TBool aIsFavourite, + TBool aThumbnailsShown ) + { + // Position X will contain the starting position of text from left side of item rect. + TInt positionX = aItemRect.Width() * KMarginXPercent / KCent; + + if (aThumbnailsShown) + { + // If contact image is shown, text starts from right side of contact picture + margin. + TRect contactImageBoundingBox = ContactImageBoundingBox( aItemRect ); + positionX += contactImageBoundingBox.Width(); + positionX += aItemRect.Width() * KMarginXPercent / KCent; + } + + TInt topMargin = KContactNameYOffsetPercent * aItemRect.Height() / KCent; + TInt height = KTextBoundingBoxHeightPercent * aContactNameFont->FontMaxHeight() / KCent; + TInt rightMargin = KMarginXPercent * aItemRect.Width() / KCent; + + // Reserve space for communication launcher icon. + // Communication launcher icon is shown only id item is highlighted. + if ( aIsCurrentItem ) + { + rightMargin += KArrowIconSizePercent * aItemRect.Height() / KCent; + } + + // If item is favourite, reserve space for favourite icon. Icon dimensions are the same as bounding box height. + if ( aIsFavourite ) + { + rightMargin += height; + } + + return TRect( + aItemRect.iTl.iX + positionX, + aItemRect.iTl.iY + topMargin, + aItemRect.iTl.iX + aItemRect.Width() - rightMargin, + aItemRect.iTl.iY + topMargin + height); + } + + +// ----------------------------------------------------------------------------- +// CompanyNameBoundingBox +// Calculates the area to which the company name and possible match highlights +// are confined. +// ----------------------------------------------------------------------------- +// +static TRect CompanyNameBoundingBox( + const TRect& aItemRect, + const CFont* aCompanyNameFont, + TBool aIsCurrentItem, + TBool aThumbnailsShown ) + { + // Position X will contain the starting position of text from left side of item rect. + TInt positionX = aItemRect.Width() * KMarginXPercent / KCent; + + if (aThumbnailsShown) + { + // If contact image is show, text starts from right side of contact picture + margin. + TRect contactImageBoundingBox = ContactImageBoundingBox( aItemRect ); + positionX += contactImageBoundingBox.Width(); + positionX += aItemRect.Width() * KMarginXPercent / KCent; + } + + TInt topMargin = KCompanyNameYOffsetPercent * aItemRect.Height() / KCent; + TInt height = KTextBoundingBoxHeightPercent * aCompanyNameFont->FontMaxHeight() / KCent; + TInt rightMargin = KMarginXPercent * aItemRect.Width() / KCent; + + // Reserve space for communication launcher icon. + // Communication launcher icon is shown only id item is highlighted. + if ( aIsCurrentItem ) + { + rightMargin += KArrowIconSizePercent * aItemRect.Height() / KCent; + } + + return TRect( + aItemRect.iTl.iX + positionX, + aItemRect.iTl.iY + topMargin, + aItemRect.iTl.iX + aItemRect.Width() - rightMargin, + aItemRect.iTl.iY + topMargin + height); + } + + +// ----------------------------------------------------------------------------- +// ArrowIconBoundingBox +// Calculates the area to which the action menu icon is drawn. +// ----------------------------------------------------------------------------- +// +TRect ArrowIconBoundingBox(const TRect& aItemRect) + { + TInt iconSize = KArrowIconSizePercent * aItemRect.Height() / KCent; + TInt rightMargin = KMarginXPercent * aItemRect.Width() / KCent; + TInt positionX = aItemRect.iBr.iX - rightMargin - iconSize; + TInt topMargin = ( aItemRect.Height() - iconSize ) / 2; // Icon is vertically centered. + + return TRect( + positionX, + aItemRect.iTl.iY + topMargin, + positionX + iconSize, + aItemRect.iTl.iY + topMargin + iconSize ); + } + + +// ----------------------------------------------------------------------------- +// FavouriteIconBoundingBox +// Calculates the area to which the favourite icon is drawn. +// Because favourite icon is drawn in the same line with contact name, +// this function takes contact name bounding box as the parameter, not +// the whole item rect. +// ----------------------------------------------------------------------------- +// +static TRect FavouriteIconBoundingBox( const TRect& aContactNameBoundingBox, TInt aTextWidth ) + { + return TRect( + aContactNameBoundingBox.iTl.iX + aTextWidth, + aContactNameBoundingBox.iTl.iY, + aContactNameBoundingBox.iTl.iX + aTextWidth + aContactNameBoundingBox.Height(), + aContactNameBoundingBox.iBr.iY); + } + + + +// ----------------------------------------------------------------------------- +// BaseLineOffset +// +// ----------------------------------------------------------------------------- +// +static TInt BaseLineOffset( const TRect& aTextBoundingBox, const CFont* aFont ) + { + TInt fontHeight = aFont->FontMaxHeight(); + TInt topMargin = KTextPlacementPercent * (aTextBoundingBox.Height() - fontHeight) / KCent; + return fontHeight + topMargin - aFont->FontMaxDescent(); + } + + +// ----------------------------------------------------------------------------- +// MirrorLayoutBoundingBox +// +// ----------------------------------------------------------------------------- +// +static TRect MirrorLayoutBoundingBox(const TRect& aSourceRect, TRect& aBoundingBoxRect) + { + return TRect( + aSourceRect.iTl.iX + aSourceRect.iBr.iX - aBoundingBoxRect.iBr.iX, + aBoundingBoxRect.iTl.iY, + aSourceRect.iTl.iX + aSourceRect.iBr.iX - aBoundingBoxRect.iTl.iX, + aBoundingBoxRect.iBr.iY); + } + + +// ----------------------------------------------------------------------------- +// ClipTextToWidth +// Cuts the text in the given pixel width. Also considers match highlight +// issues. +// NOTE: Can change the aMatch parameter if considers that there is too little +// width for matching highlight. +// NOTE 2: This function cannot handle right-to-left or bidirectional text currently. +// These cases must be handled elsewhere. +// ----------------------------------------------------------------------------- +// + +_LIT( KThreeDots, "..." ); + +static void ClipTextToWidth( + TDes& aText, + const CFont& aFont, + TInt aMaxWidthInPixels, + TBool& aMatch) + { + TInt minimumWidth = aFont.TextWidthInPixels( KThreeDots ); + + // If this is a matching piece of text, also match text marginals need to be counted. + if ( aMatch ) + { + minimumWidth += 2 * KMatchingTextMarginInPixels; + } + + if ( minimumWidth > aMaxWidthInPixels ) + { + + // Not enough space for any text. + aText.Zero(); + aMatch = EFalse; // No match highlight shown. + return; + } + + if ( aMatch ) + { + aMaxWidthInPixels -= 2 * KMatchingTextMarginInPixels; + } + + AknTextUtils::ClipToFit( aText, aFont, aMaxWidthInPixels ); + } + + +// ----------------------------------------------------------------------------- +// DrawPieceOfText +// Draws a piece of text of contact, either matching or not matching. +// Updates aXOffset argument by adding drawn text width. +// +// @return: ETrue, if there was enough space for the text to draw. +// NOTE: CWindowGc font must be set before calling this function. +// ----------------------------------------------------------------------------- +// +static TBool DrawPieceOfText( + const TRect& aBoundingBox, + TInt& aXOffset, + CWindowGc &aGc, + const TDesC& aText, + TBool aMatch, + const CFont* aFont, + const CEasyDialingListBoxData::TExtendedColors& aColors, + TBool aHighLight ) + { + if (aText.Length() == 0) + { + return ETrue; + } + + HBufC* newText = aText.Alloc(); + if ( !newText ) + { + return EFalse; + } + + TPtr textPtr = newText->Des(); + + // textWidth is the width needed for the text. + TInt textWidth = AknBidiTextUtils::MeasureTextBoundsWidth( *aFont, textPtr, CFont::TMeasureTextInput::EFVisualOrder ); + + // whole width includes also possible highlight margins. + TInt wholeWidth = textWidth + ( aMatch ? 2 * KMatchingTextMarginInPixels : 0); + + // availableWidth is the space left for drawing. + TInt availableWidth = aBoundingBox.Width() - aXOffset; + + if ( availableWidth < wholeWidth ) + { + ClipTextToWidth( textPtr, *aFont, availableWidth, aMatch ); + wholeWidth = availableWidth; + if ( aMatch ) + { + textWidth = wholeWidth - (2 * KMatchingTextMarginInPixels); + } + else + { + textWidth = wholeWidth; + } + } + + // textBox is rectangle for text without highlight. + TRect textBox( aBoundingBox ); + textBox.iTl.iX += aXOffset; + textBox.iBr.iX = textBox.iTl.iX + textWidth; + + TInt baseLineOffset = BaseLineOffset( textBox, aFont ); + + if ( aMatch ) + { + // highlightBox rectangle for text with highlight. + // Compared to no highlight, it has extra margins on both sides. + TRect highlightBox( textBox ); + highlightBox.iBr.iX = highlightBox.iTl.iX + wholeWidth; + + // Also boundingBox is shifted right for one margin width. + textBox.iTl.iX += KMatchingTextMarginInPixels; + textBox.iBr.iX += KMatchingTextMarginInPixels; + + // Outline of matching highlight is of same colour as text. + // This looks quite OK. + aGc.SetPenColor( aColors.iMatchingText ); + aGc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + aGc.SetBrushColor( aColors.iMatchingBack ); + + aGc.DrawRoundRect( highlightBox, TSize( KMatchingTextMarginInPixels, KHighligthRectangleRoundingYInPixels ) ); + + aGc.SetBrushStyle( CGraphicsContext::ENullBrush ); + } + else + { + if ( aHighLight ) + { + aGc.SetPenColor( aColors.iHighlightedText ); + } + else + { + aGc.SetPenColor( aColors.iText ); + } + } + + aGc.DrawText( textPtr, textBox, baseLineOffset ); + delete newText; + aXOffset += wholeWidth; + return ETrue; + } + + +// ----------------------------------------------------------------------------- +// DrawTextWithMatchHighlight +// Draws a string with match highlight. Highlighted and non-highlighted +// parts are separated with KHighlightSeparatorChar. +// The first text part is not highlighted and from that on highlight +// is on on every other text piece. +// +// ----------------------------------------------------------------------------- +// +static TInt DrawTextWithMatchHighlightL( + const TRect& aBoundingBox, + CWindowGc &aGc, + const TDesC& aText, + const CFont* aFont, + const CEasyDialingListBoxData::TExtendedColors& aColors, + TBool aHighLight) + { + TInt xOffset = 0; + + HBufC* visualBuf = ConvertToVisualAndClipLC( aText, *aFont, aBoundingBox ); + + TInt calculatedTextWidth = CalculateTextWidth( aBoundingBox, *visualBuf, aFont ); + + if ( AknLayoutUtils::LayoutMirrored() ) + { + xOffset = aBoundingBox.Width() - calculatedTextWidth; + } + TPtrC textPiece; + TInt textPieceIndex = 0; + TBool match = EFalse; + + aGc.UseFont( aFont ); + aGc.SetBrushStyle( CGraphicsContext::ENullBrush ); + + while ( TextUtils::ColumnText( textPiece , textPieceIndex, visualBuf, KHighlightSeparatorChar) == KErrNone ) + { + if (! DrawPieceOfText( aBoundingBox, xOffset, aGc, textPiece, match, aFont, aColors, aHighLight )) + { + // If there was not enough space for this piece of text, exit the loop stop drawing further pieces. + break; + } + + // Toggle match + match = !match; + + ++textPieceIndex; + } + + CleanupStack::PopAndDestroy( visualBuf ); + + aGc.DiscardFont(); + + return calculatedTextWidth; + } + +// ----------------------------------------------------------------------------- +// CalculateTextWidth +// Calculates the width of the text and returns it +// ----------------------------------------------------------------------------- +// +static TInt CalculateTextWidth(const TRect& aBoundingBox, const TDesC& aText, const CFont* aFont ) + { + + TInt xOffset = 0; + TPtrC textPiece; + TInt textPieceIndex = 0; + TBool match = EFalse; + + while ( TextUtils::ColumnText( textPiece , textPieceIndex, &aText, KHighlightSeparatorChar) == KErrNone ) + { + if (! CalculateTextPieceWidth( aBoundingBox, xOffset, textPiece, match, aFont )) + { + // If there was not enough space for this piece of text, exit the loop stop drawing further pieces. + break; + } + + // Toggle match + match = !match; + + ++textPieceIndex; + } + + return xOffset; + } + +// ----------------------------------------------------------------------------- +// CalculateTextPieceWidth +// +// Calculates the width of the text piece of highlighted text. +// The function is aware of the available width for the text, and can take +// possible clippings into account. +// +// The available width is given by parameters aBoundingBox (space for all text +// pieces) and aXOffset (now much of that space has already been used). +// +// The function adds the text width to the aXOffset reference parameter. +// Returns EFalse, if there is no more space for new text pieces, otherwise +// ETrue. +// +// This function contains the same logic as function DrawPieceOfText. +// ----------------------------------------------------------------------------- +// +static TBool CalculateTextPieceWidth( + const TRect& aBoundingBox, + TInt& aXOffset, + const TDesC& aText, + TBool aMatch, + const CFont* aFont ) + { + if (aText.Length() == 0) + { + return ETrue; + } + + // textWidth is the width needed for the text. + TInt textWidth = AknBidiTextUtils::MeasureTextBoundsWidth( *aFont, aText, CFont::TMeasureTextInput::EFVisualOrder ); + + // whole width includes also possible highlight margins. + TInt wholeWidth = textWidth + ( aMatch ? 2 * KMatchingTextMarginInPixels : 0); + + // availableWidth is the space left for drawing. + TInt availableWidth = aBoundingBox.Width() - aXOffset; + + if ( availableWidth < wholeWidth ) + { + + // We get to this branch, if there is not enough space for the text piece. + HBufC* newText = aText.Alloc(); + if ( !newText ) + { + return EFalse; + } + + TPtr textPtr = newText->Des(); + + // Clip the text so that it fits the space. + ClipTextToWidth( textPtr, *aFont, availableWidth, aMatch ); + + if ( textPtr.Length() > 0 ) + { + wholeWidth = AknBidiTextUtils::MeasureTextBoundsWidth( *aFont, textPtr, CFont::TMeasureTextInput::EFVisualOrder ); + wholeWidth += (aMatch ? 2 * KMatchingTextMarginInPixels : 0); + + aXOffset += wholeWidth; + } + + delete newText; + + return EFalse; + } + + aXOffset += wholeWidth; + + return ETrue; + } + +// ----------------------------------------------------------------------------- +// ContainsRightToLeftText +// +// Returns true if argument descriptor contains right-to-left text. +// ----------------------------------------------------------------------------- +// +static TBool ContainsRightToLeftText( const TDesC& aDesc ) + { + TBool rtlFound = EFalse; + + // TRunInfoArray contains information of the directionalities of the different sections of the aText + TBidirectionalState::TRunInfo array[ KMaxRunInfoArrayCount ]; + + // Initialize the TBidiLogicalToVisual converter for making the conversion from logical to visual order + TBidiLogicalToVisual converter( aDesc, array, KMaxRunInfoArrayCount ); + + // Do the reordering. Amount of different directionality sections is returned. + TInt count( converter.Reorder() ); + // If there are more directionality blocks than we are prepared to handle, just ignore + // the rest. Those shouldn't fit the screen anyway. + count = Min( count, KMaxRunInfoArrayCount ); + + for ( TInt i = 0 ; i < count && !rtlFound ; i++ ) + { + // iDirection is 0 for left-to-right text. + if (array[i].iDirection) + { + rtlFound = ETrue; + } + } + + return rtlFound; + } + +// ----------------------------------------------------------------------------- +// ConvertToVisualAndClipL +// +// Clip bidirectional text to given box and convert it to visual order, ensuring +// that the match highlights don't get broken in the process. Result is given +// as new heap descriptor which is left to CleanupStack. +// NOTE1: No clipping happens here if given descriptor contains only +// left-to-right text. +// NOTE2: It's assumed that there can be highlights only in pure LTR and RTL +// texts. Highlights for mixed LTR-RTL text cannot be handled properly. +// ----------------------------------------------------------------------------- +// +static HBufC* ConvertToVisualAndClipLC( const TDesC& aText, + const CFont& aFont, + const TRect& aBoundingBox ) + { + HBufC* buf = HBufC::NewLC( aText.Length() + KAknBidiExtraSpacePerLine ); + TPtr ptr = buf->Des(); + ptr.Copy( aText ); + + // Calling AknBidiTextUtils::ConvertToVisualAndClip doesn't work correctly + // with the highlight separator characters (they are not considered to be + // zero-length). To minimise the problem, we call the function only when + // necessary, i.e. when given text really contains RTL text. This should be + // considered as temporary solutions because now the problem of excessive + // truncation still remains with RTL languages. + if ( ContainsRightToLeftText( ptr ) ) + { + AknBidiTextUtils::ConvertToVisualAndClipL( + ptr, aFont, aBoundingBox.Width(), + aBoundingBox.Width() ); + + // If there's an odd number of highlight separators in the RTL text, + // then the matching and and not-matching parts have gone + // off-sync in the visual conversion (because parts are drawn starting + // from left and first part is always interpreted as not-matching part). + // Fix this by adding one highlight separator. + TInt sepCount = HighlightSeparatorCount( ptr ); + if ( sepCount % 2 ) + { + if ( ptr.Length() == ptr.MaxLength() ) + { + // There's no more space available. We need to reallocate the + // buffer in order to fit the extra separator character. + HBufC* newBuf = buf->ReAllocL( buf->Length() + 1 ); + CleanupStack::Pop( buf ); // original buf deleted by ReAllocL + buf = newBuf; + CleanupStack::PushL( buf ); + ptr.Set( buf->Des() ); + } + ptr.Insert( 0, KHighlightSeparatorCharAsLit ); + } + } + + return buf; + } + +// ----------------------------------------------------------------------------- +// HighlightSeparatorCount +// +// Returns number of match highlight separator characters in the text +// ----------------------------------------------------------------------------- +// +static TInt HighlightSeparatorCount( const TDesC& aText ) + { + TInt len = aText.Length(); + TInt sepCount = 0; + + for ( TInt i = 0; i < len; i++ ) + { + if ( aText[i] == KHighlightSeparatorChar ) + { + sepCount++; + } + } + + return sepCount; + } + +// End of File. + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/src/easydialinglistboxitemdrawer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/src/easydialinglistboxitemdrawer.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,288 @@ +/* +* 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: Easy dialing listbox list item drawer. +* +*/ + + +// INCLUDE FILES + +#include "easydialinglistboxitemdrawer.h" +#include "easydialinglistboxdata.h" +#include "easydialinglistbox.h" +#include "easydialinglistboxview.h" + +#include +#include +#include + +#include + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +const TInt KTextColorFallBack = 215; +const TInt KMatchingTextColorFallBack = 0; +const TInt KMatchingTextBackgroundFallBack = 243; + +// FORWARD DECLARATIONS + +/* + * ============================================================================== + * + * + * class CEasyDialingListBoxItemDrawer + * + * + * ============================================================================== + */ + +// ----------------------------------------------------------------------------- +// CEasyDialingListBoxItemDrawer +// Constructor +// ----------------------------------------------------------------------------- +// +CEasyDialingListBoxItemDrawer::CEasyDialingListBoxItemDrawer( + MTextListBoxModel* aTextListBoxModel, + const CFont* aFont, + CFormattedCellListBoxData* aFormattedCellData) : + CFormattedCellListBoxItemDrawer( aTextListBoxModel, aFont, aFormattedCellData) + { + + } + + +// ----------------------------------------------------------------------------- +// EasyDialingCellData +// +// ----------------------------------------------------------------------------- +// +CEasyDialingListBoxData* CEasyDialingListBoxItemDrawer::EasyDialingCellData() const + { + return STATIC_CAST( CEasyDialingListBoxData*, iData ); + } + + +// ----------------------------------------------------------------------------- +// DrawItem +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxItemDrawer::DrawItem( + TInt aItemIndex, + TPoint aItemRectPos, + TBool aItemIsSelected, + TBool aItemIsCurrent, + TBool aViewIsEmphasized, + TBool aViewIsDimmed) const + { + CFormattedCellListBoxItemDrawer::DrawItem( aItemIndex, aItemRectPos, aItemIsSelected, aItemIsCurrent, aViewIsEmphasized, aViewIsDimmed); + } + + +// ----------------------------------------------------------------------------- +// DrawItemText +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxItemDrawer::DrawItemText( + TInt aItemIndex, + const TRect& aItemTextRect, + TBool aItemIsCurrent, + TBool aViewIsEmphasized, + TBool /* aItemIsSelected */) const + { + MAknListBoxTfxInternal* transApi = CAknListLoader::TfxApiInternal( iGc ); + if ( transApi ) + { + transApi->StartDrawing( MAknListBoxTfxInternal::EListNotSpecified ); + } + + iGc->SetPenColor(iTextColor); + iGc->SetBrushColor(iBackColor); + + TPtrC temp=iModel->ItemText(aItemIndex); + + SetupGc(aItemIndex); + if ( transApi ) + { + transApi->StopDrawing(); + } + +// TBool removeicon = (!aItemIsSelected && !ItemMarkReverse()) || (aItemIsSelected && ItemMarkReverse()); + + CEasyDialingListBoxData::TExtendedColors colors; + colors.iText=iTextColor; + colors.iBack=iBackColor; + colors.iHighlightedText = iHighlightedTextColor; + colors.iHighlightedBack = iHighlightedBackColor; + colors.iMatchingText = iMatchingText; + colors.iMatchingBack = iMatchingBack; + + DrawBackgroundAndSeparatorLines( aItemTextRect ); + + TBool highlightShown = ETrue; + if ( ( FormattedCellData()->RespectFocus() && !aViewIsEmphasized ) ) + { + if ( transApi ) + { + transApi->Remove( MAknListBoxTfxInternal::EListHighlight ); + } + + highlightShown = EFalse; + } + + // normal drawing without mark icon + EasyDialingCellData()->DrawData( + Properties(aItemIndex), + *iGc, + &temp, + aItemTextRect, + aItemIsCurrent && highlightShown, + colors ); + + //currently few themes doesnt support IsListSeperatorLines method therefore it is commented out + // for the time being in the below if loop + + if ( /*AknsDrawUtils::IsListSeperatorLines( AknsUtils::SkinInstance() ) &&*/ aItemTextRect.iTl.iY > iViewRect.iTl.iY ) + { + if ( transApi ) + { + transApi->StartDrawing( MAknListBoxTfxInternal::EListItem ); + } + + TRgb lineColor; + TInt retVal = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), lineColor, KAknsIIDFsLineColors, + EAknsCIFsLineColorsCG1); + // we are fetching lineColor from the skin.Incase, if there isn't any lineColor then we are using + //iMatchingBack as a backup line Color + if( retVal == KErrNone) + { + iGc->SetPenColor(lineColor); + } + else + { + iGc->SetPenColor(iMatchingBack); + } + iGc->SetPenStyle(CGraphicsContext::ESolidPen); + iGc->DrawLine( aItemTextRect.iTl, TPoint( aItemTextRect.iBr.iX, aItemTextRect.iTl.iY) ); + + if ( transApi ) + { + transApi->StopDrawing(); + } + } + } + + +// ----------------------------------------------------------------------------- +// SetColors +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxItemDrawer::SetColors() + { + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + if ( !skin ) + { + // These values are copied from "aknlist.cpp". + // This branch should be never take, and can be considered protective programming. + iTextColor = AKN_LAF_COLOR_STATIC( KTextColorFallBack); + iHighlightedTextColor = AKN_LAF_COLOR_STATIC( KTextColorFallBack ); + iMatchingText = AKN_LAF_COLOR_STATIC( KMatchingTextColorFallBack ); + iMatchingBack = AKN_LAF_COLOR_STATIC( KMatchingTextBackgroundFallBack ); + } + + else + { + AknsUtils::GetCachedColor( skin, + iTextColor, + KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG7 ); + + AknsUtils::GetCachedColor( skin, + iHighlightedTextColor, + KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG10 ); + + AknsUtils::GetCachedColor( skin, + iMatchingText, + KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG24 ); + + AknsUtils::GetCachedColor( skin, + iMatchingBack, + KAknsIIDQsnHighlightColors, + EAknsCIQsnHighlightColorsCG2 ); + } + } + + + +// ----------------------------------------------------------------------------- +// DrawBackgroundAndSeparatorLines +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxItemDrawer::DrawBackgroundAndSeparatorLines( const TRect& aItemTextRect ) const + { + CCoeControl* control = FormattedCellData()->Control(); + + MAknListBoxTfxInternal* transApi = CAknListLoader::TfxApiInternal( iGc ); + + if ( transApi && !transApi->EffectsDisabled() ) + { + MAknListBoxTfx* tfxApi = CAknListLoader::TfxApi( iGc ); + + if ( tfxApi ) + { + tfxApi->EnableEffects( ETrue ); + } + } + + if ( transApi ) + { + transApi->StartDrawing( MAknListBoxTfxInternal::EListView ); + } + TBool bgDrawn( EFalse ); + + if ( control ) + { + MAknsControlContext *cc = AknsDrawUtils::ControlContext( control ); + + bgDrawn = AknsDrawUtils::DrawBackground( + AknsUtils::SkinInstance(), + cc, + control, + *Gc(), + aItemTextRect.iTl, + aItemTextRect, + KAknsDrawParamDefault ); + } + + if ( !bgDrawn ) + { + iGc->Clear( aItemTextRect ); + } + if ( transApi ) + { + transApi->StopDrawing(); + } + } + +// end of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/src/easydialinglistboxview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/src/easydialinglistboxview.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,78 @@ +/* +* 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: Easy dialing listbox view. +* +*/ + + +// INCLUDE FILES + +#include "easydialinglistboxview.h" +#include "easydialinglistbox.h" +#include "easydialinglistboxitemdrawer.h" +#include "easydialinglistboxdata.h" +#include "easydialingcontactdatamanager.h" +#include +#include + +#include + +// AvKON and drawing header files +#include + +#include +#include +#include + +#include + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +/* + * ============================================================================== + * + * + * class CEasyDialingListBoxView + * + * + * ============================================================================== + */ + + +// ----------------------------------------------------------------------------- +// SetCurrentItemIndexToNone +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingListBoxView::SetCurrentItemIndexToNone() + { + iCurrentItemIndex = -1; + } + +// End of File. + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/src/easydialingplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/src/easydialingplugin.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,1892 @@ +/* +* 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: Easy dialing plugin. +* +*/ + +// INCLUDE FILES + +#include "easydialingplugin.h" +#include "easydialinglistbox.h" +#include "easydialinglogger.h" +#include "easydialingpanics.h" +#include "easydialingcenreplistener.h" +#include "easydialingcontactdatamanager.h" +#include "easydialingutils.h" +#include + +// AVKON and drawing header files +#include +#include +#include +#include +#include + +// Predictive search header files +#include +#include +#include +#include +#include +#include + +// Virtual phonebook header files +#include +#include +#include +#include +#include // contains virtual phonebook data fields +#include + +// CCA Launcher header files. +#include +#include +#include +#include + +// Service provider settings api +#include + +// AIW header files +#include +#include + +// CCA contactor service. +#include "edcontactorservice.h" + +// Open system trace +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "easydialingpluginTraces.h" +#endif + +#include +#include // for BaflUtils + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS +const TInt KEDMaximumMatchingContactsCount = 100; +const TInt KEasyDialingListBoxModelGranularity = 8; +const TInt KEasyDialingMaximumMatchingParts = 10; +const TInt KErrEasyDialingNoFirstNamePCSIndexing = -2000; +const TInt KErrEasyDialingNoLastNamePCSIndexing = -2001; + +const TInt KEDFlushContactDataManagerLimit = 20; + +const TText KHighlightSeparatorChar = 0x1F; +_LIT(KHighlightSeparatorCharAsLiteral,"\x1F"); +const TText KListFieldSeparatorChar = '\t'; + +const TText KArabicAndSouthEastAsianRangeStart = 0x0600; +const TText KArabicAndSouthEastAsianRangeEnd = 0x19FF; +const TText KArabicPresentationFormsARangenStart = 0xFB50; +const TText KArabicPresentationFormsARangeEnd = 0xFDFF; +const TText KArabicPresentationFormsBRangenStart = 0xFE70; +const TText KArabicPresentationFormsBRangeEnd = 0xFEFF; + +const TInt KMaxRunInfoArrayCount = 20; + +// MACROS + +// LOCAL CONSTANTS AND MACROS +_LIT(KResourceFile, "\\resource\\easydialingpluginresources.rsc"); + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +TInt CompareTPsMatchLocation( const TPsMatchLocation& a1, const TPsMatchLocation& a2); + +void AppendStringWithMatchDataL( + TDes& aBuffer, + const TDesC& aText, + CPSRequestHandler* aPSHandler, + const CPsQuery* aPSQuery ); + +TBool HighlightingSupportedForText( const TDesC& aText ); + +inline TBool HighlightingSupportedForScript( TText aChar ); + +TBool IsStrictlyBidirectional( const TDesC& aText ); + +static HBufC* AllocWithoutHighlightSeparatorsLC( TDesC& aDesc ); + +static TBool IsItuTCharacter( TChar aChar ); + +// FORWARD DECLARATIONS + +using namespace AknLayoutScalable_Avkon; + + +// ----------------------------------------------------------------------------- +// CEasyDialingPlugin +// The default c++ constructor +// ----------------------------------------------------------------------------- +// +CEasyDialingPlugin::CEasyDialingPlugin() + : iActionToBeLaunched( ENoActionDefined ) + { + } + +// ----------------------------------------------------------------------------- +// NewL +// Create instance of concrete ECOM interface implementation. +// ----------------------------------------------------------------------------- +// +CEasyDialingPlugin* CEasyDialingPlugin::NewL() + { + OstTrace0( TRACE_NORMAL, CEASYDIALINGPLUGIN_NEWL_LOAD_PLUGIN, "Loading plugin.." ); + LOGSTRING("EasyDialingPlugin: Loading plugin.."); + + CEasyDialingPlugin* self = new (ELeave) CEasyDialingPlugin; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + OstTrace0( TRACE_NORMAL, CEASYDIALINGPLUGIN_NEWL_LOAD_PLUGIN_OK, "Loading plugin completed succesfully" ); + LOGSTRING("EasyDialingPlugin: Loading plugin completed succesfully"); + return self; + } + +// ----------------------------------------------------------------------------- +// ConstructL +// Main construction handled here. Creates connection to the predictive search +// engine and initialises all member data. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::ConstructL() + { + // Create a contact store array. + HBufC* defaultCdb = VPbkContactStoreUris::DefaultCntDbUri().AllocLC(); + iContactDataStores.AppendL( defaultCdb ); + CleanupStack::Pop( defaultCdb ); + + // Create a contact manager instance. + iContactStoreUriArray = CVPbkContactStoreUriArray::NewL(); + iContactStoreUriArray->AppendL( TVPbkContactStoreUriPtr( VPbkContactStoreUris::DefaultCntDbUri() ) ); + iContactManager = CVPbkContactManager::NewL( *iContactStoreUriArray ); + + // Set contact store observer to listen to contact store events. + iContactManager->ContactStoresL().OpenAllL( *this ); + + PERF_MEASURE_START + + InitPredictiveContactSearchL(); + + PERF_MEASURE_STOP + + // Find a handle to ca launcher extension MCCAConnectionExt. + // Easydialing has to use the extension API, because it needs function CloseAppL + // only found in extension. + // MCCAConnection extension has to be obtained through MCCAParameter extension, + // since MCCAConnection is not designed to be extensible API. + MCCAParameter* parameter = TCCAFactory::NewParameterL(); + TAny* any = parameter->CcaParameterExtension( KMCCAConnectionExtUid ); + + // Parameter can be deallocated since "any" containing pointer to contact launcher + // is not tied to parameter in any way. + parameter->Close(); + + // Cast the pointer into contact launcher object. + User::LeaveIfNull( any ); + iContactLauncher = static_cast( any ); + + iCenrepListener = CEasyDialingCenrepListener::NewL(this); + + iContactDataManager = new (ELeave) CEasyDialingContactDataManager(iContactManager); + iContactDataManager->ConstructL(); + iContactDataManager->SetObserver(this); + + iContactorService = CEDContactorService::NewL( this ); + + // EasyDialing resource file is attempted to be read from the same directory where the + // executed binary is located + TFileName dllFileName; + Dll::FileName( dllFileName ); + + TParse parse; + User::LeaveIfError( parse.Set(KResourceFile, &dllFileName, NULL) ); + TFileName resourceFileName( parse.FullName() ); + + BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), resourceFileName ); + iResourceFileOffset = iCoeEnv->AddResourceFileL( resourceFileName ); + + SetComponentsToInheritVisibility( ETrue ); + } + +// --------------------------------------------------------- +// ~CEasyDialingPlugin +// The desctructor +// --------------------------------------------------------- +// +CEasyDialingPlugin::~CEasyDialingPlugin() + { + iObservers.Reset(); + + if ( iContactManager ) + { + TRAP_IGNORE( iContactManager->ContactStoresL().CloseAll( *this ) ); + } + + delete iCenrepListener; + delete iContactDataManager; + delete iPredictiveSearchQuery; + delete iContactManager; + delete iContactStoreUriArray; + iContactDataStores.ResetAndDestroy(); + + if (iPredictiveContactSearchHandler) + { + iPredictiveContactSearchHandler->RemoveObserver(this); + } + delete iPredictiveContactSearchHandler; + + delete iListBoxModel; + + delete iContactListBox; + + if (iContactLauncher) + { + iContactLauncher->Close(); + } + + delete iContactorService; + + iCoeEnv->DeleteResourceFile( iResourceFileOffset ); + + delete iInputBlocker; + + if ( iAsyncCallBack ) + { + iAsyncCallBack->Cancel(); + } + delete iAsyncCallBack; + + OstTrace0( TRACE_NORMAL, CEASYDIALINGPLUGIN_UNLOAD_PLUGIN, "Plugin unloaded" ); + LOGSTRING("EasyDialingPlugin: Plugin unloaded"); + } + + +// ----------------------------------------------------------------------------- +// Initialize +// Initialises easy dialing. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::InitializeL( CCoeControl& aParent ) + { + SetContainerWindowL( aParent ); + SetMopParent( &aParent ); + + TCallBack asyncCallBack( AsyncCallBackToLaunchAction, this ); + iAsyncCallBack = new ( ELeave ) CAsyncCallBack( asyncCallBack, + CActive::EPriorityStandard ); + + iContactListBox = new (ELeave) CEasyDialingListBox(); + iListBoxModel = new(ELeave) CDesCArrayFlat( KEasyDialingListBoxModelGranularity ); + + iContactListBox->ConstructL( CEikListBox::EPaintedSelection + | CEikListBox::ENoFirstLetterMatching + | CEikListBox::EDisableItemSpecificMenu, + iContactDataManager ); + iContactListBox->SetListBoxObserver(this); + + iContactListBox->SetMopParent(this); + + CTextListBoxModel* model = iContactListBox->Model(); + model->SetItemTextArray( iListBoxModel ); + model->SetOwnershipType( ELbmDoesNotOwnItemArray ); + + + iContactListBox->MakeVisible( EFalse ); + + SetFocus( EFalse ); + iContactListBox->ActivateL(); + + } + + +// ----------------------------------------------------------------------------- +// Reset +// Resets easydialing plugin. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::Reset() + { + // PCS searches completing must be discarded, if the complete + // after Reset() -call. + iDiscardCompletingSearches = ETrue; + + iNewSearchNeeded = EFalse; + iSearchString.Zero(); + iListBoxModel->Reset(); + iNumberOfNames = 0; + iContactListBox->MakeVisible( EFalse ); + iContactDataManager->Reset(); + if ( IsFocused() ) + { + SetFocus( EFalse ); + } + } + + +// ----------------------------------------------------------------------------- +// InitPredictiveContactSearchL +// Initialises predictive contact search. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::InitPredictiveContactSearchL() + { + iPredictiveContactSearchHandler = CPSRequestHandler::NewL(); + iPredictiveContactSearchHandler->AddObserverL(this); + + // Put the searched contact fields into array. + RArray contact_fields; + CleanupClosePushL(contact_fields); + + // Check which relevant contact fields are indexed in PCS search. + iFirstNamePCSIndex = FindContactFieldPCSIndexL( R_VPBK_FIELD_TYPE_FIRSTNAME ); + iLastNamePCSIndex = FindContactFieldPCSIndexL( R_VPBK_FIELD_TYPE_LASTNAME ); + iCompanyNamePCSIndex = FindContactFieldPCSIndexL( R_VPBK_FIELD_TYPE_COMPANYNAME ); + + // If first name and last name are not indexed in PCS, easy dialing plugin + // can not function reasonably. The function leaves, which in turn causes + // the plugin not to be initialized. + // Company name not being indexed is not as severe case, and does not cause a leave. + // Fields used in PCS indexing are configured in cenrep 2000B5C6. + if ( iFirstNamePCSIndex == KErrNotFound ) + { + OstTrace0( TRACE_ERROR, CEASYDIALINGPLUGIN_INITPREDICTIVECONTACTSEARCHL_ERROR_NO_FIRST_NAME, "ERROR, PCS does not support first name indexing!" ); + LOGSTRING("EasyDialingPlugin: PCS does not support first name indexing => Leave"); + User::Leave( KErrEasyDialingNoFirstNamePCSIndexing ); + } + if ( iLastNamePCSIndex == KErrNotFound ) + { + OstTrace0( TRACE_ERROR, CEASYDIALINGPLUGIN_INITPREDICTIVECONTACTSEARCHL_ERROR_NO_LAST_NAME, "ERROR, PCS does not support last name indexing!" ); + LOGSTRING("EasyDialingPlugin: PCS does not support last name indexing => Leave"); + User::Leave( KErrEasyDialingNoLastNamePCSIndexing ); + } + + // First name, last name and company name (if supported) are used in PCS search. + contact_fields.Append(R_VPBK_FIELD_TYPE_FIRSTNAME); + contact_fields.Append(R_VPBK_FIELD_TYPE_LASTNAME); + if ( iCompanyNamePCSIndex != KErrNotFound ) + { + contact_fields.Append(R_VPBK_FIELD_TYPE_COMPANYNAME); + } + + // Create and fill ps settings object. + CPsSettings* ps_settings = CPsSettings::NewL(); + CleanupStack::PushL(ps_settings); + + ps_settings->SetSearchUrisL(iContactDataStores); + ps_settings->SetMaxResults(KEDMaximumMatchingContactsCount); + ps_settings->SetSortType(EAlphabetical); + ps_settings->SetDisplayFieldsL(contact_fields); + + // Set the PCS settings. + iPredictiveContactSearchHandler->SetSearchSettingsL(*ps_settings); + + CleanupStack::PopAndDestroy(ps_settings); + CleanupStack::PopAndDestroy(&contact_fields); + + iPredictiveSearchQuery = CPsQuery::NewL(); + } + +// ----------------------------------------------------------------------------- +// OfferKeyEventL +// Check the received keypad event and performs user +// actions related to it. +// ----------------------------------------------------------------------------- +// +TKeyResponse CEasyDialingPlugin::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType) + { + TKeyResponse keyResponse = EKeyWasNotConsumed; + + if ( aKeyEvent.iCode == 0 && aKeyEvent.iScanCode != EStdKeyDevice3) + { + return keyResponse; + } + + TInt keyCode = aKeyEvent.iCode; + + // Swap right and left key codes in mirrored layout. This needs to be done + // also for action menu grid as CAknGrid handles arrow keys like this: + // left key = next column (not item!) and right is previous column and + // grid layout (LtR/RtL) is not taken into account when movement is done + // in columns (always like in LtR layout). So if right key should move + // focus to the right also in mirroded layout, key codes must be switched. + // This kind of approach is used also e.g. in application grid. + if ( AknLayoutUtils::LayoutMirrored() ) + { + if ( keyCode == EKeyRightArrow ) keyCode = EKeyLeftArrow; + else if ( keyCode == EKeyLeftArrow ) keyCode = EKeyRightArrow; + } + + + if ( IsFocused() ) + { + if ( keyCode == EKeyUpArrow ) + { + // if the focus is on the top-most item + if ( iContactListBox->CurrentItemIndex() == 0) + { + // then focus jumps off the component. + SetFocus( EFalse ); + DrawDeferred(); + keyResponse = EKeyWasConsumed; + } + else + { + keyResponse = iContactListBox->OfferKeyEventL( aKeyEvent, aType ); + } + } + else if ( keyCode == EKeyDownArrow ) + { + // if the focus is on the bottom-most item + if ( iContactListBox->CurrentItemIndex() == (iNumberOfNames - 1) ) + { + // then focus jumps off the component. + SetFocus( EFalse ); + DrawDeferred(); + keyResponse = EKeyWasConsumed; + } + else + { + keyResponse = iContactListBox->OfferKeyEventL( aKeyEvent, aType ); + } + } + + else if ( keyCode == EKeyRightArrow ) + { + iRememberFocus = ETrue; + AsyncActionLaunchL( ELaunchCurrentContact ); + keyResponse = EKeyWasConsumed; + } + + else if ( keyCode == EKeyLeftArrow ) + { + // then focus jumps off the component. + SetFocus( EFalse ); + DrawDeferred(); + keyResponse = EKeyWasConsumed; + } + + else + { + // then focus jumps off the component. + SetFocus( EFalse ); + } + } + + else if ( iNumberOfNames > 0 ) // not in focus but there are contacts to show + { + if ( keyCode == EKeyUpArrow || keyCode == EKeyDownArrow ) + { + SetFocus( ETrue ); + keyResponse = iContactListBox->SetFocusedWithKeyEventL( aKeyEvent, aType ); + } + } + return keyResponse; + } + + +// ----------------------------------------------------------------------------- +// CountComponentControls +// +// ----------------------------------------------------------------------------- +// +TInt CEasyDialingPlugin::CountComponentControls() const + { + return iNumberOfNames > 0 ? 1 : 0; + } + + +// ----------------------------------------------------------------------------- +// ComponentControl +// +// ----------------------------------------------------------------------------- +// +CCoeControl* CEasyDialingPlugin::ComponentControl( TInt aIndex ) const + { + return aIndex == 0 ? iContactListBox : NULL; + } + + +// ----------------------------------------------------------------------------- +// MakeVisible +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::MakeVisible( TBool aVisible ) + { + if ( aVisible != IsVisible() ) + { + CCoeControl::MakeVisible( aVisible ); + + if ( !aVisible && IsFocused() ) + { + SetFocus( EFalse ); + } + } + } + + +// ----------------------------------------------------------------------------- +// SizeChanged +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::SizeChanged() + { + TRect rect = Rect(); + // convert rect to absolute coordinates + rect.SetRect( PositionRelativeToScreen(), rect.Size() ); + + iContactListBox->SetMaxRect( rect ); + iContactListBox->SetRectToNumberOfItems( iNumberOfNames ); + } + + +// ----------------------------------------------------------------------------- +// FocusChanged +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::FocusChanged( TDrawNow aDrawNow ) + { + iContactListBox->SetFocus( IsFocused() ); + if( !IsFocused() ) + { + // To be on the safe side, cancel async callback and reset input block. + CancelActionLaunchAndInputBlock(); + } + CCoeControl::FocusChanged( aDrawNow ); + InformObservers( MDialingExtensionObserver::EFocusChanged ); + } + + +// ----------------------------------------------------------------------------- +// SetInputL +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::SetInputL( const TDesC& aSearchString ) + { + if ( !IsEnabled() ) + { + return; + } + OstTraceExt1( TRACE_NORMAL, CEASYDIALINGPLUGIN_SET_INPUT, "SetInput: '%S' ", aSearchString ); + LOGSTRING1("EasyDialingPlugin: SetInput: '%S'", &aSearchString ); + + // Earlier here was a test if the search string is the same as the one used in previous search. + // If it was, no search was done but function returned immediately. + // This has now been removed. It is possible that contacts have changed, and a new search + // may be needed even if the search string is the same. + + // Check if search string is just empty space or 0-length. Decision was made that no + // matches are shown if search string is just space (would show all contacts) + // even if somebody might have unnamed contacts. Should be quite rare. + // It's assumed later on in the code that string is not just empty space. + TLex searchString( aSearchString ); + searchString.SkipSpace(); + if ( searchString.Eos() ) + { + // the end of the string reached after skipping empty space + Reset(); + } + else // proper search string + { + iSearchString.Copy( aSearchString.Left( iSearchString.MaxLength() ) ); + LaunchSearchL(); + } + } + + +// ----------------------------------------------------------------------------- +// MatchingContactCount +// +// ----------------------------------------------------------------------------- +// +TInt CEasyDialingPlugin::MatchingContactCount() + { + return iNumberOfNames; + } + + +// ----------------------------------------------------------------------------- +// 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: + { + if ( iSearchString.Length() > 0 ) + { + if ( iContactLauncherActive ) + { + // Set the flag to make a search when communication launcher exits. + iNewSearchNeeded = ETrue; + } + else + { + // We get here if user e.g. leaves dialer open and goes to Contacts + // application and does some editing. + AsyncActionLaunchL( ELaunchSearch ); + } + } + } + + break; + + default: + + break; + } + + + + } + + +// ----------------------------------------------------------------------------- +// CEasyDialingPlugin::OpenComplete +// From MVPbkContactStoreListObserver. +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::OpenComplete() + { + } + +// ----------------------------------------------------------------------------- +// EasyDialingSettingsChanged +// From MEasyDialingCenrepListenerObserver +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::EasyDialingSettingsChanged( TInt aValue ) + { + if ( aValue == 0 ) + { + Reset(); + InformObservers( MDialingExtensionObserver::EEasyDialingDisabled ); + } + else if ( aValue == 1 ) + { + InformObservers( MDialingExtensionObserver::EEasyDialingEnabled ); + } + MakeVisible( aValue ); + } + +// ----------------------------------------------------------------------------- +// EasyDialingContactThumbnailsSettingsChanged +// From MEasyDialingCenrepListenerObserver +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::EasyDialingContactThumbnailsSettingsChanged( TInt aThumbnailSettingValue ) + { + iContactDataManager->SetContactThumbnailSetting( aThumbnailSettingValue ); + iContactDataManager->Reload(); + DrawDeferred(); + } + +// ----------------------------------------------------------------------------- +// AllContactDataLoaded +// From MContactDataManagerObserver +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::AllContactDataLoaded() + { + iContactListBox->DrawDeferred(); + } + +// ----------------------------------------------------------------------------- +// InformContactorEvent +// From MEDContactorObserver +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::InformContactorEvent( MEDContactorObserver::TEvent aEvent ) + { + + // This callback function simply propagates the events to its own listener. + switch ( aEvent ) + { + case MEDContactorObserver::ECommunicationStarted: + InformObservers( MDialingExtensionObserver::ECommunicationStarted ); + break; + case MEDContactorObserver::ECommunicationCancelled: + InformObservers( MDialingExtensionObserver::ECommunicationCancelled ); + break; + default: + break; + } + + // Reset focus unless it is flagged to be remembered. + if ( ! iRememberFocus ) + { + SetFocus( EFalse ); + DrawDeferred(); + } + + iRememberFocus = EFalse; + } + +// ----------------------------------------------------------------------------- +// Draw +// The actual UI drawing function. Draws the easy dialing popup bubble on the +// idle screen. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::Draw( const TRect& /* aRect */ ) const + { + return; + } + + +// ----------------------------------------------------------------------------- +// LaunchSearchL +// Initiates predictive contact search. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::LaunchSearchL() + { + if ( iSearchString.Length() == 0 ) + { + return; + } + + iDiscardCompletingSearches = EFalse; + iNewSearchNeeded = EFalse; + + iPredictiveSearchQuery->Reset(); + + for ( TInt i = 0; i < iSearchString.Length(); i++ ) + { + // Add a query item + CPsQueryItem* item = CPsQueryItem::NewL(); + CleanupStack::PushL(item); + + item->SetCharacter( iSearchString[i] ); + + // The PCS mode used with character is based on character itself, + // not to the keyboard it is made with. While this is not strictly + // identical to checking the used keyboard, this behaves identically + // in most of the normal cases, and makes the logic simpler. + if ( IsItuTCharacter( iSearchString[i] ) ) + { + item->SetMode( EItut ); + } + else + { + item->SetMode( EQwerty ); + } + + iPredictiveSearchQuery->AppendL(*item); + + // Previous CPsQuery::AppendL takes the ownership of item. + // Do not delete item. + CleanupStack::Pop(item); + } + + // Issue the search. SearchL is asynchronous function => returns immediately. + iPredictiveContactSearchHandler->SearchL(*iPredictiveSearchQuery); + } + + +// ----------------------------------------------------------------------------- +// HandlePsResultsUpdate from MPsResultsObserver +// Called after predictive search has been completed. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::HandlePsResultsUpdate( RPointerArray& aResults, RPointerArray& aSeqs ) + { + if (iCenrepListener && iCenrepListener->Value() == 0) + { + // Easydialing is off. We should arrive here only if user turned it off while a search was happening. + Reset(); + return; + } + TRAPD( leaveError, HandlePsResultsUpdateL( aResults, aSeqs ) ); + + if( leaveError ) + { + OstTrace1( TRACE_ERROR, CEASYDIALINGPLUGIN_HANDLEPSRESULTSUPDATE, "HandlePsResultsUpdate failed: %d", leaveError ); + LOGSTRING1("EasyDialingPlugin: HandlePsResultsUpdate failed: %d", leaveError ); + } + } + + +// ----------------------------------------------------------------------------- +// HandlePsError from MPsResultsObserver +// Called when search error happens. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::HandlePsError( TInt aErrorCode ) + { + OstTrace1( TRACE_ERROR, CEASYDIALINGPLUGIN_HANDLEPSERROR, "PCS Error: %d", aErrorCode ); + LOGSTRING1("EasyDialingPlugin: PCS Error: %d", aErrorCode ); + } + +// ----------------------------------------------------------------------------- +// CachingStatus from MPsResultsObserver +// Called to update caching status. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::CachingStatus( TCachingStatus& aStatus, TInt& aError ) + { + OstTraceExt2( TRACE_NORMAL, CEASYDIALINGPLUGIN_CACHINGSTATUS, "PCS CachingStatus: %d, error: %d", ( TUint )( aStatus ), aError ); + LOGSTRING2("EasyDialingPlugin: PCS CachingStatus: %d, error: %d", aStatus, aError ); + } + + +// ----------------------------------------------------------------------------- +// FindContactFieldPCSIndex +// Searches the index that stores the given contact field. +// To see possible contact field numbering, see file "vpbkeng.rsg". +// ----------------------------------------------------------------------------- +// +TInt CEasyDialingPlugin::FindContactFieldPCSIndexL( TInt aIndex ) + { + RArray fieldOrder; + CleanupClosePushL( fieldOrder ); + + // Current implementation searches only from default database. + // Later this may be expanded to search SIM contacts as well. + HBufC* default_cdb = VPbkContactStoreUris::DefaultCntDbUri().AllocLC(); + + iPredictiveContactSearchHandler->GetDataOrderL( *default_cdb, fieldOrder ); + + for ( TInt i = 0; i < fieldOrder.Count(); i++) + { + if ( fieldOrder[i] == aIndex ) + { + CleanupStack::PopAndDestroy( default_cdb ); + CleanupStack::PopAndDestroy( &fieldOrder ); + return i; + } + } + + CleanupStack::PopAndDestroy( default_cdb ); + CleanupStack::PopAndDestroy( &fieldOrder ); + return KErrNotFound; + } + + +// ----------------------------------------------------------------------------- +// HandlePsResultsUpdateL +// This function does the actual callback fork, and must be trapped inside +// HandlePsResultsUpdateL. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::HandlePsResultsUpdateL( RPointerArray& aResults, RPointerArray& /*aSeqs*/ ) + { + // If iDiscardCompletingSearches is ETrue, don't show search results but just return. + // If easydialing has been reset with reset function, no searches completed after that + // can be shown. + // This is done like this because there seems not to be a feasible way of cancelling all + // PCS search request in PCS API. CancelRequest does not work here. + if ( iDiscardCompletingSearches ) + { + return; + } + + iListBoxModel->Reset(); + iContactListBox->HandleItemRemovalL(); + + TInt numberOfPCSMatches( aResults.Count() ); + + // Resetting the contactdatamanager causes the thumbnails to flicker a bit, because + // we need to load the thumbnails again. But if there are lots of search results, or + // lots of loaded thumbnails in the manager, matching the search results to the + // thumbnail manager contents may take too much time. If there are lots of results, + // it is likely that the contents of the listbox change anyway, so the flickering + // doesn't matter too much. This also limits the memory usage of the manager. + // But if there are fewer search results, it is worth trying to match them + // with the contents of thumbnail manager. + + TBool matchThumbnails(ETrue); + if ( numberOfPCSMatches > KEDFlushContactDataManagerLimit ) + { + iContactDataManager->Reset(); + matchThumbnails = EFalse; + } + + OstTrace1( TRACE_NORMAL, CEASYDIALINGPLUGIN_HANDLEPSRESULTSUPDATEL_MATCHES, "Matching results from PCS: %d", numberOfPCSMatches ); + LOGSTRING1("EasyDialingPlugin: Matching results from PCS: %d", numberOfPCSMatches ); + + if ( numberOfPCSMatches > 0 ) + { + // retrieve the name order before adding + CPbkContactEngine* pbkEngine = CPbkContactEngine::NewL(); + CleanupStack::PushL( pbkEngine ); + CPbkContactEngine::TPbkNameOrder nameOrder = pbkEngine->NameDisplayOrderL(); + CleanupStack::PopAndDestroy( pbkEngine ); + + // map results to old contact match data + for( TInt i = 0; i < numberOfPCSMatches; i++ ) + { + TInt indexFromEnd = numberOfPCSMatches - i - 1; + + MVPbkContactLink* link = iPredictiveContactSearchHandler->ConvertToVpbkLinkLC( + *(aResults[indexFromEnd]), *iContactManager ); + if ( !iContactDataManager->IsFavL( link ) ) + { + // handle favourites separately, in another loop + HBufC* contactString = CreateContactStringLC( aResults[ indexFromEnd ], nameOrder ); + CreateListBoxContactStringL( *contactString, link, matchThumbnails, EFalse ); + CleanupStack::PopAndDestroy( contactString ); + } + CleanupStack::PopAndDestroy( link ); + + OstTraceExt2( TRACE_NORMAL, CEASYDIALINGPLUGIN_HANDLEPSRESULTSUPDATEL_SHOW_MATCH, "Contact #%d: '%S'", i+1, iContactStringCreationBuffer ); + LOGSTRING2("EasyDialingPlugin: Contact #%d: '%S'", i+1, &iContactStringCreationBuffer ); + } + + TInt numberOfFavs( iContactDataManager->NumberOfFavsL() ); + TBuf results; + for ( TInt i = 0; i < numberOfFavs; i++ ) + { + // check if this fav matches the search + HBufC* favContactString = iContactDataManager->FavContactStringLC( i, nameOrder ); + results = KNullDesC; + iPredictiveContactSearchHandler->LookupMatchL( + *iPredictiveSearchQuery, *favContactString, results ); + if ( results.Length() > 0 ) + { + // matches, add this fav to listbox. + MVPbkContactLink* link = iContactDataManager->FavLinkLC( i ); + CreateListBoxContactStringL( *favContactString, link, matchThumbnails, ETrue ); + CleanupStack::PopAndDestroy(); //link + } + CleanupStack::PopAndDestroy( favContactString ); + } + + iNumberOfNames = iListBoxModel->Count(); + iContactListBox->SetRectToNumberOfItems( iNumberOfNames ); + iContactListBox->HandleItemAdditionL(); + // Scroll the list to bottom + iContactListBox->ScrollToMakeItemVisible( iNumberOfNames-1 ); + + iContactListBox->MakeVisible( ETrue ); + } + else + { + iNumberOfNames = 0; + iContactListBox->MakeVisible( EFalse ); + } + + if ( IsFocused() ) + { + SetFocus( EFalse ); + } + + DrawDeferred(); + + InformObservers( MDialingExtensionObserver::ESearchComplete ); + } + + +// ----------------------------------------------------------------------------- +// void CCASimpleNotifyL() +// Implements MCCAObserver notification interface. +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::CCASimpleNotifyL( TNotifyType aType, TInt aReason ) + { + OstTraceExt2( TRACE_NORMAL, CEASYDIALINGPLUGIN_CCASIMPLENOTIFYL, "CCASimpleNotifyL: type: %d, reason: %d", ( TUint )( aType ), aReason ); + LOGSTRING2("EasyDialingPlugin: CCASimpleNotifyL: type: %d, reason: %d", (TInt)aType, aReason ); + + iContactLauncherActive = EFalse; + + 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 ) + { + SetFocus( EFalse ); + DrawDeferred(); + } + iRememberFocus = EFalse; + + // Inform observers. + InformObservers( MDialingExtensionObserver::ECCALauncherExit ); + } + + +// ----------------------------------------------------------------------------- +// void LaunchCurrentContactL() +// Implements MCCAObserver notification interface. +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::LaunchCurrentContactL() + { + __ASSERT_DEBUG( iNumberOfNames > 0, EasyDialingPanic( EEasyDialingPanicNoResults ) ); + __ASSERT_DEBUG( iContactListBox->CurrentItemIndex() >= 0, EasyDialingPanic( EEasyDialingPanicNoContactSelected ) ); + + if (( iContactLauncherActive ) || ( iNumberOfNames == 0 ) || ( !iContactListBox ) || ( iContactListBox->CurrentItemIndex() < 0 )) + { + OstTrace0( TRACE_ERROR, CEASYDIALINGPLUGIN_LAUNCHCURRENTCONTACTL_ERROR, "LaunchCurrentContactL: Parameter error" ); + LOGSTRING("EasyDialingPlugin: LaunchCurrentContactL - Parameter error"); + return; + } + + MCCAParameter* launchParameters = TCCAFactory::NewParameterL(); + CleanupClosePushL( *launchParameters ); + + // ESoftExit flag causes that ca launcher will not close the + // client application in any circumstance. + // Application hosting easydialing is telephone application. + // It must never be closed, so we must use this flag. + launchParameters->SetConnectionFlag(MCCAParameter::ESoftExit); + + launchParameters->SetContactDataFlag(MCCAParameter::EContactLink); + + // Get the contact link of the current contact item. + HBufC8* contact8 = iContactListBox->CurrentContactLinkLC(); + + // Expand it into 16-bit descriptor because cca launcher api expects this. + HBufC16* contact16 = HBufC16::NewLC( contact8->Length() ); + contact16->Des().Copy( *contact8 ); + + launchParameters->SetContactDataL( *contact16 ); + + CleanupStack::PopAndDestroy( contact16 ); + CleanupStack::PopAndDestroy( contact8 ); + + TPtrC selectedName = iListBoxModel->MdcaPoint( iContactListBox->CurrentItemIndex() ); + OstTraceExt1( TRACE_NORMAL, CEASYDIALINGPLUGIN_LAUNCHCURRENTCONTACTL_LAUNCH_CCA, "Launch CL for contact: '%S'", selectedName ); + LOGSTRING1("EasyDialingPlugin: Launch CL for contact: '%S'", &selectedName ); + + iContactLauncher->LaunchAppL( *launchParameters, this ); + + // Ownership of parameter transferred to CCA launcher => pop but do not destroy. + CleanupStack::Pop( launchParameters ); + + + iContactLauncherActive = ETrue; + CAknAppUi* appUi = static_cast( iCoeEnv->AppUi() ); + appUi->HandleCommandL( EPhoneCmdBlockingDialogLaunched ); + } + + +// ----------------------------------------------------------------------------- +// CreateListBoxContactStringL +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::CreateListBoxContactStringL( + const TDesC& aContactString, + MVPbkContactLink *aLink, + TBool aMatchThumbnails, + TBool aFav ) + { + // Construct the contact string for the listbox model. + iContactStringCreationBuffer.Zero(); + + // Append contact thumbnail id. + HBufC* thumbnailId = iContactDataManager->GetThumbnailIdL( aLink, aMatchThumbnails, aFav ); + iContactStringCreationBuffer.Append( *thumbnailId ); + delete thumbnailId; + iContactStringCreationBuffer.Append( KListFieldSeparatorChar ); + + AppendStringWithMatchDataL( + iContactStringCreationBuffer, + aContactString, + iPredictiveContactSearchHandler, + iPredictiveSearchQuery ); + + // Append the whole string to listbox model. + iListBoxModel->AppendL( iContactStringCreationBuffer ); + } + +// ----------------------------------------------------------------------------- +// CreateContactStringLC +// +// ----------------------------------------------------------------------------- +// +HBufC* CEasyDialingPlugin::CreateContactStringLC( CPsClientData* aResult, CPbkContactEngine::TPbkNameOrder aNameOrder ) + { + TPtr firstName = aResult->Data( iFirstNamePCSIndex )->Des(); + TPtr lastName = aResult->Data( iLastNamePCSIndex )->Des(); + TPtr companyName( NULL, 0 ); + + if ( iCompanyNamePCSIndex != KErrNotFound ) + { + companyName.Set( aResult->Data( iCompanyNamePCSIndex )->Des() ); + } + return EasyDialingUtils::CreateContactStringLC( firstName, lastName, companyName, aNameOrder ); + } + + +// ----------------------------------------------------------------------------- +// AddObserverL +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::AddObserverL( MDialingExtensionObserver* aObserver ) + { + if ( !aObserver ) + { + return; + } + + User::LeaveIfError( iObservers.Append( aObserver ) ); + } + + +// ----------------------------------------------------------------------------- +// RemoveObserver +// +// Removes the parameter observer from observer list if found. If same observer +// has registered multiple times (which is unnecessary), removed just the first +// registration. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::RemoveObserver( MDialingExtensionObserver* aObserver ) + { + for ( TInt i = 0; i < iObservers.Count(); i++ ) + { + if ( iObservers[i] == aObserver) + { + iObservers.Remove( i ); + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// InformObservers +// Informs all registered observers of easy dialing events. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::InformObservers( MDialingExtensionObserver::TEvent aEvent ) + { + for ( TInt i = 0; i < iObservers.Count(); i++ ) + { + iObservers[i]->HandleDialingExtensionEvent( aEvent ); + } + } + +// ----------------------------------------------------------------------------- +// CbaResourceId +// Returns EasyDialingPlugin specific CBA resource ID that +// Phone application can use when updating Soft Keys. +// ----------------------------------------------------------------------------- +// +TInt CEasyDialingPlugin::CbaResourceId() + { + return R_EASYDIALING_CBA; + } + + +// ----------------------------------------------------------------------------- +// MenuResourceId +// Returns EasyDialingPlugin specific menu resource ID that +// Phone application can use when easydialing is in focus. +// ----------------------------------------------------------------------------- +// +TInt CEasyDialingPlugin::MenuResourceId() + { + return R_EASYDIALING_MENUBAR; + } + + +// ----------------------------------------------------------------------------- +// InitializeMenuPaneL +// Initializes easy dialing menu pane. This function is meant to be called in +// DynInitMenuPaneL of the application, if the application wants to use easy +// dialing menu. +// ----------------------------------------------------------------------------- +// +TBool CEasyDialingPlugin::InitializeMenuPaneL( CEikMenuPane& aMenuPane, TInt aMenuResourceId ) + { + if ( aMenuResourceId == R_PHONEUIDIALER_OPTIONS_MENU ) + { + TInt index( KErrNotFound ); + // To be on the safe side - place holder was added into phoneui.rss. + if ( aMenuPane.MenuItemExists( EEasyDialingSettingsItemPlaceHolder, index ) ) + { + // Add first menu item (= on/off submenu) after placeHolder item and + // then delete that (empty) placeHolder. + aMenuPane.AddMenuItemsL( R_EASYDIALING_OPTIONS_ON_OFF_MENU_ITEM, + EEasyDialingSettingsItemPlaceHolder ); + aMenuPane.DeleteMenuItem( EEasyDialingSettingsItemPlaceHolder ); + + LOGSTRING("EasyDialingPlugin::InitializeMenuPaneL: Added on/off menu into dialer's menu" ); + } + + // Return EFalse as only one menu item was added here. + return EFalse; + } + + else if ( aMenuResourceId == R_EASYDIALING_MENU ) + { + TBool voiceCall = EFalse; + TBool videoCall = EFalse; + TBool message = EFalse; + + if ( iContactListBox->CurrentItemIndex() >= 0 ) + { + TInt index = iContactListBox->CurrentContactDataIndex(); + + voiceCall = iContactDataManager->VoiceCallAvailable( index ); + videoCall = iContactDataManager->VideoCallAvailable( index ); + message = iContactDataManager->UniEditorAvailable( index ); + } + + // Call menu item is not show if neither voice call nor video call are possible. + aMenuPane.SetItemDimmed( EEasyDialingVoiceCall, !voiceCall && !videoCall ); + aMenuPane.SetItemDimmed( EEasyDialingSendMessage, !message ); + + LOGSTRING("EasyDialingPlugin::InitializeMenuPaneL: InitializeMenuPaneL done" ); + + return ETrue; + } + + else if ( aMenuResourceId == R_EASYDIALING_OPTIONS_CALL_MENU ) + { + TBool voiceCall = EFalse; + TBool videoCall = EFalse; + + if ( iContactListBox->CurrentItemIndex() >= 0 ) + { + TInt index = iContactListBox->CurrentContactDataIndex(); + + voiceCall = iContactDataManager->VoiceCallAvailable( index ); + videoCall = iContactDataManager->VideoCallAvailable( index ); + } + + aMenuPane.SetItemDimmed( EEasyDialingVoiceCall, !voiceCall ); + aMenuPane.SetItemDimmed( EEasyDialingVideoCall, !videoCall ); + + LOGSTRING("EasyDialingPlugin::InitializeMenuPaneL: InitializeMenuPaneL for call submenu done" ); + + return ETrue; + } + + else if ( aMenuResourceId == R_EASYDIALING_OPTIONS_ON_OFF_CASCADE_MENU ) + { + if ( IsEnabled() ) + { + aMenuPane.SetItemButtonState( EEasyDialingOn, EEikMenuItemSymbolOn ); + } + else + { + aMenuPane.SetItemButtonState( EEasyDialingOff, EEikMenuItemSymbolOn ); + } + + LOGSTRING("EasyDialingPlugin::InitializeMenuPaneL: InitializeMenuPaneL for on/off submenu done" ); + + return ETrue; + } + + else + { + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// HandleCommandL +// Method for handling EasyDialingPlugin specific commands. +// ----------------------------------------------------------------------------- +// +TBool CEasyDialingPlugin::HandleCommandL( TInt aCommand ) + { + // Input blocker can't block controls higher on the control stack than + // ECoeStackPriorityDialog so we will get HandleCommandL calls from + // phoneappui (CBA) when input blocker is active (=not NULL). + + if ( iInputBlocker && aCommand != EEasyDialingCallHandlingActivated ) + { + // Some action is already being launched since iInputBlocker exists. + // Only call activation command requires always action from this plugin. + return ETrue; + } + + + TBool ret(EFalse); + + switch( aCommand ) + { + case EEasyDialingOpenContact: + + iRememberFocus = ETrue; + AsyncActionLaunchL( ELaunchCurrentContact ); + ret = ETrue; + break; + + // EEasyDialingEnterKeyAction is sent when Enter key is pressed. + // EEasyDialingMakeCall is sent when send key or send toolbar button or send menu item is pressed. + case EEasyDialingVoiceCall: // fall through + case EEasyDialingEnterKeyAction: + // Make a call. + iRememberFocus = ETrue; + AsyncActionLaunchL( ECallCurrentContact ); + ret = ETrue; + break; + + // Video call is selectable only through menu. + case EEasyDialingVideoCall: + // Make a video call. + iRememberFocus = ETrue; + AsyncActionLaunchL( EVideoCallCurrentContact ); + ret = ETrue; + break; + + // Uni-editor message is selectable only through menu. + case EEasyDialingSendMessage: + // Create a message. + iRememberFocus = ETrue; + AsyncActionLaunchL( ESendMessageCurrentContact ); + ret = ETrue; + break; + + // EEasyDialingCallHandlingActivated is sent when the in-call-ui of telephony gets activated + case EEasyDialingCallHandlingActivated: + + iRememberFocus = EFalse; + // Stop input block and async action launch in case they are active. + CancelActionLaunchAndInputBlock(); + // Close down number selection popup in case it happens to be open. + iContactorService->CancelService(); + // Close down communication launcher if it's active + if ( iContactLauncherActive ) + { + iNewSearchNeeded = EFalse; + iContactLauncher->CloseAppL(); + } + ret = ETrue; + break; + + case EEasyDialingOn: + + iCenrepListener->SetEasyDialingSettingsValue( 1 ); + ret = ETrue; + break; + + case EEasyDialingOff: + + iCenrepListener->SetEasyDialingSettingsValue( 0 ); + ret = ETrue; + break; + + case EEasyDialingClosePopup: + + // Not only Number Entry is removed but also closes down number selection popup in case it happens to be open. + iContactorService->CancelService(); + ret = ETrue; + break; + + default: + break; + } + return ret; + } + +// ----------------------------------------------------------------------------- +// IsEnabled +// Check if Easy dialing is enabled in the settings +// ----------------------------------------------------------------------------- +// +TBool CEasyDialingPlugin::IsEnabled() + { + return ( iCenrepListener->Value() != 0 ); + } + +// ----------------------------------------------------------------------------- +// AsyncActionLaunchL +// Use asynchronous callback to launch action. While action is being launched, +// input blocker is used to avoid OfferKeyEvent and HandlePointerEvent calls +// coming in. Both end key and application key work despite of input blocker. +// Input blocker can't block phoneappui's cba so extra check is needed in +// HandleCommandL method. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::AsyncActionLaunchL( const TEasyDialingAction aAction ) + { + iActionToBeLaunched = aAction; + + CancelActionLaunchAndInputBlock(); + + if ( aAction == ELaunchSearch ) + { + // Must be set as low as possible to enable PCS to update its store. + iAsyncCallBack->SetPriority( CActive::EPriorityIdle ); + } + else + { + iAsyncCallBack->SetPriority( CActive::EPriorityStandard ); + } + + iAsyncCallBack->CallBack(); // activates callback request + + // By defining cancel handler, we don't block all input but system is still + // able to deactivate the view etc. + iInputBlocker = CAknInputBlock::NewCancelHandlerLC( this ); + CleanupStack::Pop( iInputBlocker ); + + // This means that iInputBlocker is deleted by CAknInputBlock when + // it's cancelled ( we get a callback where iInputBlocker is set to NULL). + iInputBlocker->SetCancelDelete( iInputBlocker ); + } + +// ----------------------------------------------------------------------------- +// AsyncCallBackToLaunchAction +// Callback function for CAsyncCallBack class. +// ----------------------------------------------------------------------------- +// +TInt CEasyDialingPlugin::AsyncCallBackToLaunchAction( TAny* aPtr ) + { + CEasyDialingPlugin* plugin = static_cast( aPtr ); + + TRAP_IGNORE( plugin->DoLaunchActionL() ); + + // Stop input block if active (=not NULL). + if ( plugin->iInputBlocker ) + { + plugin->iInputBlocker->Cancel(); + } + + plugin->iActionToBeLaunched = ENoActionDefined; + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// DoLaunchActionL +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::DoLaunchActionL( ) + { + // If ELaunchCurrentContact, then we launch cca launcher. + if ( iActionToBeLaunched == ELaunchCurrentContact ) + { + LaunchCurrentContactL(); + return; + } + else if ( iActionToBeLaunched == ELaunchSearch ) + { + LaunchSearchL(); + return; + } + + // If not for launching current contact or performing search, + // the action is launching some communication method. + + if ( iContactorService->IsBusy() ) + { + LOGSTRING("EasyDialingPlugin: LaunchActionL - contactor service is busy!"); + return; + } + + // Get current contact link. + HBufC8* contact8 = iContactListBox->CurrentContactLinkLC(); + + TPtrC contactString( iListBoxModel->MdcaPoint( iContactListBox->CurrentItemIndex() ) ); + + TPtrC fullNameSeparators; + TInt error = TextUtils::ColumnText( fullNameSeparators , 1, &contactString ); + __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) ); + + // Remove highlight separators. It is possible that some contactor API has problem with them. + HBufC* fullName = AllocWithoutHighlightSeparatorsLC( fullNameSeparators ); + + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector selector( + VPbkFieldTypeSelectorFactory::EEmptySelector ); + + switch ( iActionToBeLaunched ) + { + case ECallCurrentContact: + { + // Easy Dialing provides pretty much the same functionality for big Call icon + // and Send key than phonebook's contact list view by using aiw interface + // in edcontactor. + // At this point one must however check whether to use voip or voice call selector - + // otherwise correct logic is provided by aiw interface. + // Note that Easy Dialing ignores default numbers and addresses set for + // action types and shows always the number and address list if there are + // more than one possible number/address for some action. + + CSPSettingsVoIPUtils* sPSettings = CSPSettingsVoIPUtils::NewLC(); + + if ( sPSettings->IsPreferredTelephonyVoIP() ) + { + selector = VPbkFieldTypeSelectorFactory::EVOIPCallSelector; + } + else + { + selector = VPbkFieldTypeSelectorFactory::EVoiceCallSelector; + } + + CleanupStack::PopAndDestroy( sPSettings ); + } + break; + + case EVideoCallCurrentContact: + + selector = VPbkFieldTypeSelectorFactory::EVideoCallSelector; + break; + + case ESendMessageCurrentContact: + + selector = VPbkFieldTypeSelectorFactory::EUniEditorSelector; + break; + + default: + CleanupStack::PopAndDestroy( fullName ); + CleanupStack::PopAndDestroy( contact8 ); + __ASSERT_DEBUG( EFalse, EasyDialingPanic( EEasyDialingActionNotSupported ) ); + return; + } + + CEDContactorService::TCSParameter param( selector, *contact8, 0, *fullName ); + + iContactorService->ExecuteServiceL( param ); + + CleanupStack::PopAndDestroy( fullName ); + CleanupStack::PopAndDestroy( contact8 ); + } + + +// ----------------------------------------------------------------------------- +// CancelActionLaunchAndInputBlock +// Should be called when focus is lost or when call ui is activated. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::CancelActionLaunchAndInputBlock() + { + iAsyncCallBack->Cancel(); + if ( iInputBlocker ) + { + iInputBlocker->Cancel(); + } + } + +// ----------------------------------------------------------------------------- +// HandleListBoxEventL +// EasyDialerListBox calls this function when listbox events are reported +// to observers. +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::HandleListBoxEventL( CEikListBox* /*aListBox*/, TListBoxEvent aEventType ) + { + LOGSTRING1( "EasyDialingPlugin: HandleListBoxEventL( %d ) - Enter", aEventType ); + + switch( aEventType ) + { + case EEventItemSingleClicked: + // 9.2. Selecting contact initiates call + AsyncActionLaunchL( ECallCurrentContact ); + break; + + case KEasyDialingContactLongTapped: + AsyncActionLaunchL( ELaunchCurrentContact ); + break; + + // We are not interested about the other listbox events. + default: + break; + } + } + +// ----------------------------------------------------------------------------- +// From MAknInputBlockCancelHandler. +// Called when input block is cancelled. +// ----------------------------------------------------------------------------- +// + void CEasyDialingPlugin::AknInputBlockCancel() + { + LOGSTRING("EasyDialingPlugin: AknInputBlockCancel"); + + // iInputBlocker will be deleted right after this callback by CAknInputBlock + // cause we are using CAknInputBlock::SetCancelDelete method. + iInputBlocker = NULL; + } + +/* + * ============================================================================== + * + * Local functions + * + * ============================================================================== + */ + + + +// ----------------------------------------------------------------------------- +// CompareTPsMatchLocation +// Compares two TPsMatchLocation objects based on where the match +// is located in the search string. This used in ordering matches +// based on their location. +// ----------------------------------------------------------------------------- +// +TInt CompareTPsMatchLocation( const TPsMatchLocation& a1, const TPsMatchLocation& a2) + { + if ( a1.index == a2.index ) + { + return 0; + } + return ( a1.index > a2.index ) ? 1 : -1; + } + + +// ----------------------------------------------------------------------------- +// AppendStringWithMatchDataL +// Appends a string with match data into a TDes buffer. Match data is a string +// where matching and non-matching parts are separated by matching hightlight separator +// characters. +// ----------------------------------------------------------------------------- +// +void AppendStringWithMatchDataL( + TDes& aBuffer, + const TDesC& aText, + CPSRequestHandler* aPSHandler, + const CPsQuery* aPSQuery ) + { + if ( HighlightingSupportedForText( aText ) ) + { + CDesCArrayFlat* matchingParts = new (ELeave) CDesCArrayFlat(KEasyDialingMaximumMatchingParts); + CleanupStack::PushL( matchingParts ); + + RArray matchIndices; + CleanupClosePushL( matchIndices ); + + aPSHandler->LookupL( *aPSQuery , aText , *matchingParts, matchIndices ); + + // Sort matchIndices array. Later handling assumes it to be sorted according to index field. + TLinearOrder order( CompareTPsMatchLocation ); + matchIndices.Sort( order ); + + TInt numberOfIndices = matchIndices.Count(); + TInt textOffset = 0; + + for (TInt i = 0; i < numberOfIndices ; i++ ) + { + TInt matchingPartStart = matchIndices[i].index; + TInt matchingPartLength = matchIndices[i].length; + + // Append the non-matching part (if exists) + if ( matchingPartStart > textOffset ) + { + TPtrC notMatchingPart = aText.Mid( textOffset, matchingPartStart - textOffset ); + aBuffer.Append( notMatchingPart ); + } + + // Append matching separator charactes. + aBuffer.Append( KHighlightSeparatorChar ); + + TPtrC matchingPart = aText.Mid( matchingPartStart, matchingPartLength ); + aBuffer.Append( matchingPart ); + + // Append matching separator charactes. + aBuffer.Append( KHighlightSeparatorChar ); + + textOffset = matchingPartStart + matchingPartLength; + } + + CleanupStack::PopAndDestroy( &matchIndices ); + CleanupStack::PopAndDestroy( matchingParts ); + + // Now there still may be one not matching part to be appended. + if ( textOffset < aText.Length() ) + { + TPtrC notMatchingPart = aText.Mid( textOffset, aText.Length() - textOffset ); + aBuffer.Append( notMatchingPart ); + } + } + else // HighlightingSupportedForText( aText ) + { + aBuffer.Append( aText ); + } + } + +// ----------------------------------------------------------------------------- +// HighlightingSupportedForText +// Checks if highlighting of matching text part is supported for the combination +// of scripts used in the given text +// ----------------------------------------------------------------------------- +// +TBool HighlightingSupportedForText( const TDesC& aText ) + { + // Highlighting for text is supported unless it contains one ore more + // characters written with unsupported script. + TBool supported = ETrue; + for ( TInt i = 0 ; i < aText.Length() && supported ; ++i ) + { + supported = HighlightingSupportedForScript( aText[i] ); + } + + // ... or it contains both LTR and RTL blocks + if ( supported ) + { + supported = !IsStrictlyBidirectional( aText ); + } + + return supported; + } + +// ----------------------------------------------------------------------------- +// HighlightingSupportedForScript +// Checks if highlighting of matching text part is supported for the script +// of given character +// ----------------------------------------------------------------------------- +// +TBool HighlightingSupportedForScript( TText aChar ) + { + // For now, we don't support highlighting for any Arabic or South East Asian + // script. This is because many of these scripts use rendering rules + // which cause problems for our simple highlighting logic designed for + // Latin script. + + TBool belongsToUnsupportedRange = + ( aChar >= KArabicAndSouthEastAsianRangeStart && aChar <= KArabicAndSouthEastAsianRangeEnd ) || + ( aChar >= KArabicPresentationFormsARangenStart && aChar <= KArabicPresentationFormsARangeEnd ) || + ( aChar >= KArabicPresentationFormsBRangenStart && aChar <= KArabicPresentationFormsBRangeEnd ); + return !belongsToUnsupportedRange; + } + +// ----------------------------------------------------------------------------- +// IsStrictlyBidirectional +// +// Returns true if argument descriptor contains both left-to-right and +// right-to-left blocks +// ----------------------------------------------------------------------------- +// +TBool IsStrictlyBidirectional( const TDesC& aText ) + { + TBool bothDirectionsFound = EFalse; + + // TRunInfoArray contains information of the directionalities of the different sections of the aText + TBidirectionalState::TRunInfo array[ KMaxRunInfoArrayCount ]; + + // Initialize the TBidiLogicalToVisual converter for making the conversion from logical to visual order + TBidiLogicalToVisual converter( aText, array, KMaxRunInfoArrayCount ); + + // Do the reordering. Amount of different directionality sections is returned. + TInt blockCount = converter.Reorder(); + if ( blockCount > KMaxRunInfoArrayCount ) + { + // If there are more directionality blocks than we are prepared to handle, then we don't + // know the directionality of them all. Report this as bidirectional to be on the safe side. + // This should be an extremely rare special case. + bothDirectionsFound = ETrue; + } + else if ( blockCount > 1 ) + { + // If there are more than one directionality blocks, go through all of them and + // check if the resolved direction changes in any of the blocks. + TUint8 firstDirection = array[0].iDirection; + for ( TInt i = 1 ; i < blockCount && !bothDirectionsFound ; i++ ) + { + if ( array[i].iDirection != firstDirection ) + { + bothDirectionsFound = ETrue; + } + } + } + + return bothDirectionsFound; + } + + +// ----------------------------------------------------------------------------- +// AllocWithoutHighlightSeparatorsLC +// +// Allocates a copy of the parameter descriptor with highlight separators +// removed. +// ----------------------------------------------------------------------------- +// +static HBufC* AllocWithoutHighlightSeparatorsLC( TDesC& aDesc ) + { + HBufC* resultDesc = aDesc.AllocLC(); + TPtr ptr = resultDesc->Des(); + AknTextUtils::StripCharacters( ptr, KHighlightSeparatorCharAsLiteral ); + return resultDesc; + } + + +// ----------------------------------------------------------------------------- +// IsItuTCharacter +// +// Test whether parameter character is a number pad character "0123456789#*+" +// ----------------------------------------------------------------------------- +// +static TBool IsItuTCharacter( TChar aChar ) + { + return aChar.IsDigit() || + aChar.GetCategory() == TChar::EArabicNumber || + aChar == TChar('#') || + aChar == TChar('*') || + aChar == TChar('+'); + } + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/src/easydialingutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/src/easydialingutils.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,99 @@ +/* +* 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: Helper class for easydialing. +* +*/ + +#include +#include + +#include "easydialingutils.h" + +const TText KNameSeparatorChar = ' '; +const TText KListFieldSeparatorChar = '\t'; + +// ----------------------------------------------------------------------------- +// CreateContactStringLC +// +// ----------------------------------------------------------------------------- +// +HBufC* EasyDialingUtils::CreateContactStringLC( + const TDesC& aFirstName, + const TDesC& aLastName, + const TDesC& aCompanyName, + CPbkContactEngine::TPbkNameOrder aNameOrder ) + { + // first strip control chars from the names + HBufC* firstName = aFirstName.AllocLC(); + TPtr fPtr = firstName->Des(); + AknTextUtils::StripCharacters( fPtr, KAknStripListControlChars ); + + HBufC* lastName = aLastName.AllocLC(); + TPtr lPtr = lastName->Des(); + AknTextUtils::StripCharacters( lPtr, KAknStripListControlChars ); + + HBufC* companyName = aCompanyName.AllocLC(); + TPtr cPtr = companyName->Des(); + AknTextUtils::StripCharacters( cPtr, KAknStripListControlChars ); + + // Calculate string lenght. If first name and last name are missing, company name is duplicated. + // Add company name lenght twice to make sure there is enough space. + TInt stringLength = firstName->Length() + lastName->Length() + 2 * companyName->Length() + 2; + HBufC* string = HBufC::NewLC( stringLength ); + TPtr ptr = string->Des(); + + // If there is no first name, the last name will be used. + if ( firstName->Length() == 0 ) + { + ptr.Copy( *lastName ); + } + + // If there is no last name, the first name will be used. + else if ( lastName->Length() == 0 ) + { + ptr.Copy( *firstName ); + } + + // If there are both first and last name, the name string is composed of them both. + else + { + if( aNameOrder == CPbkContactEngine::EPbkNameOrderFirstNameLastName ) + { + ptr.Copy( *firstName ); + ptr.Append( KNameSeparatorChar ); + ptr.Append( *lastName ); + } + else + { + ptr.Copy( *lastName ); + ptr.Append( KNameSeparatorChar ); + ptr.Append( *firstName ); + } + } + + // If firstname and last name are missing, duplicate company name into name field. + if ( ptr.Length() == 0 ) + { + ptr.Append( *companyName ); + } + + // Append company name using tab as a separator. + ptr.Append( KListFieldSeparatorChar ); + ptr.Append( *companyName ); + + CleanupStack::Pop( string ); + CleanupStack::PopAndDestroy( 3, firstName ); + CleanupStack::PushL( string ); + return string; + } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/traces/OstTraceDefinitions.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/traces/OstTraceDefinitions.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,23 @@ +/* +* 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: OstTraceDefinitions.h +* +*/ +#ifndef __OSTTRACEDEFINITIONS_H__ +#define __OSTTRACEDEFINITIONS_H__ +// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler +// REMOVE BEFORE CHECK-IN TO VERSION CONTROL +// #define OST_TRACE_COMPILER_IN_USE +#include +#endif diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/traces/easydialingpluginTraces.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/traces/easydialingpluginTraces.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,22 @@ +/* +* 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: easydialingpluginTraces.h +* +*/ +// Created by TraceCompiler1.1.0 +// DO NOT EDIT, CHANGES WILL BE LOST +// CONTENT WILL BE GENERATED AUTOMATICALLY HERE + +// End of file + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/data/edta.rls --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/data/edta.rls Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2009-2009 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: +* +*/ + + +// LOCALISATION STRINGS + + +//d:Caption string for app. +rls_string STRING_r_hewb_caption_string "Easy dialing test application" + +//d:Short caption string for app. +rls_string STRING_r_hewb_short_caption_string "HW" + +//d:Subcaption for options menu +rls_string STRING_r_hewb_command_plugin_functions_menu "ED plugin functions" + +//d:Subcaption for options menu +rls_string STRING_r_hewb_command_test_functions_menu "Testing functions" + +//d:First item in "Options" menu pane, "hello" event. +rls_string STRING_r_hewb_command_set_plugin_input "Set ED plugin input" + +//d:Menu item for show matching contacts. +rls_string STRING_r_hewb_command_search_contacts "Search contacts" + +//d:Menu item for launching the first contact of the previous search. +rls_string STRING_r_hewb_command_launch_first_contact "Launch first" + +//d:Menu item for selecting and launching a contact from the previous search. +rls_string STRING_r_hewb_command_select_and_launch_contact "Select contact and open CL" + +//d:Menu item for checking the PCSserver. +rls_string STRING_r_hewb_command_check_pcsserver "Check PCS Server" + +//d:Menu item for showing phonebooks name order +rls_string STRING_r_hewb_command_show_name_ordering "Phonebook name order" + +//d:Menu item for creating test contact database +rls_string STRING_r_hewb_command_create_contact_base "Create test contacts" + +//d:Menu item for two consequtive searches test. +rls_string STRING_r_hewb_command_two_consequtive_searches "Two consequtive searches" + +//d:Menu item for coverage tests. +rls_string STRING_r_hewb_command_coverage_test "Coverage test" + +//d:Fourth item in "Options" menu pane, "exit" event. +rls_string STRING_r_hewb_exit "Exit" + +//d:When user requests EEdtaSetPluginInput event, text below is shown. +rls_string STRING_r_hewb_command_set_plugin_input_text "Set easy dial input" + +// d: Menu item for thumbnail setting +rls_string STRING_r_hewb_command_thumbnail_settings_menu "Thumbnail cenrep setting" + +// d: Menu item for thumbnail setting item +rls_string STRING_r_hewb_command_show_thumbnails "Show thumbnails" + +// d: Menu item for thumbnail setting item +rls_string STRING_r_hewb_command_hide_thumbnails "Hide thumbnails" + +//d:When user requests EEdtaCommand2 event, text below is shown. +rls_string STRING_r_hewb_file_text "" + +rls_string STRING_r_edta_loc_resource_file_1 "\\resource\\apps\\edta" + +// d: Default document name. Not to be localised. +rls_string STRING_r_default_document_name "EDTA" + +// d: Icon file path. Not to be localised. +rls_string STRING_r_icon_file_path "\\resource\\apps\\edta_aif.mif" + +// d: Application file. Not to be localised. +rls_string STRING_r_app_file "edta" + + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/data/edta.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/data/edta.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,279 @@ +/* +* 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: +* +*/ + +// RESOURCE IDENTIFIER +NAME HEWB // 4 letter ID + + +// INCLUDES +#include +#include +#include +#include +#include + +#include "edta.hrh" +#include "edta.rls" +//#include "easydialingconstants.hrh" + +// RESOURCE DEFINITIONS +// ----------------------------------------------------------------------------- +// +// Define the resource file signature +// This resource should be empty. +// +// ----------------------------------------------------------------------------- +// +RESOURCE RSS_SIGNATURE + { + } + +// ----------------------------------------------------------------------------- +// +// Default Document Name +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_default_document_name + { + buf=STRING_r_default_document_name; + } + +// ----------------------------------------------------------------------------- +// +// Define default menu and CBA key. +// +// ----------------------------------------------------------------------------- +// +RESOURCE EIK_APP_INFO + { + menubar = r_edta_menubar; + cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; + } + + +// ----------------------------------------------------------------------------- +// +// r_edta_menubar +// Menubar for edta example +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_BAR r_edta_menubar + { + titles = + { + MENU_TITLE { menu_pane = r_edta_menu; } + }; + } + + +// ----------------------------------------------------------------------------- +// +// r_edta_menu +// Menu for "Options" +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_edta_menu + { + items = + { + MENU_ITEM + { + txt = STRING_r_hewb_command_plugin_functions_menu; + cascade = r_edta_plugin_functions_menu; + }, + MENU_ITEM + { + command = EEdtaCommandShowContacts; + txt = STRING_r_hewb_command_search_contacts; + }, + MENU_ITEM + { + command = EEdtaSelectAndLaunchContact; + txt = STRING_r_hewb_command_select_and_launch_contact; + }, + MENU_ITEM + { + command = EEdtaCommandCheckPCSServer; + txt = STRING_r_hewb_command_check_pcsserver; + }, + MENU_ITEM + { + command = EEdtaCommandShowNameOrdering; + txt = STRING_r_hewb_command_show_name_ordering; + }, + MENU_ITEM + { + txt = STRING_r_hewb_command_test_functions_menu; + cascade = r_edta_test_functions_menu; + }, + MENU_ITEM + { + command = EAknSoftkeyExit; + txt = STRING_r_hewb_exit; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_edta_plugin_functions_menu +// Submenu for "Options" +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_edta_plugin_functions_menu + { + items = + { + MENU_ITEM + { + command = EEdtaSetPluginInput; + txt = STRING_r_hewb_command_set_plugin_input; + }, + MENU_ITEM + { + command = EEdtaCommandTwoConsequtiveSearchesTest; + txt = STRING_r_hewb_command_two_consequtive_searches; + }, + MENU_ITEM + { + txt = STRING_r_hewb_command_thumbnail_settings_menu; + cascade = r_edta_plugin_thumbnail_settings_menu; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_edta_plugin_thumbnail_settings_menu +// Submenu for "Thumbnail setting" +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_edta_plugin_thumbnail_settings_menu + { + items = + { + MENU_ITEM + { + command = EEdtaCommandShowThumbnails; + txt = STRING_r_hewb_command_show_thumbnails; + }, + MENU_ITEM + { + command = EEdtaCommandHideThumbnails; + txt = STRING_r_hewb_command_hide_thumbnails; + } + }; + } + + +// ----------------------------------------------------------------------------- +// +// r_edta_test_functions_menu +// Submenu for "Options" +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_edta_test_functions_menu + { + items = + { + MENU_ITEM + { + command = EEdtaCommandCreateTestContactBase; + txt = STRING_r_hewb_command_create_contact_base; + }, + MENU_ITEM + { + command = EEdtaCommandMiscCoverageTest; + txt = STRING_r_hewb_command_coverage_test; + } + }; + } + + +// ----------------------------------------------------------------------------- +// +// Resources for messages. +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF32 r_hewb_command_set_plugin_input_text { buf=STRING_r_hewb_command_set_plugin_input_text; } +RESOURCE TBUF32 r_hewb_file_text { buf=STRING_r_hewb_file_text; } +RESOURCE TBUF32 r_hewb_caption_string { buf=STRING_r_hewb_caption_string; } + +// ---------------------------------------------------------------------------- +// +// r_edta_localisable_app_info +// +// ---------------------------------------------------------------------------- +// +RESOURCE LOCALISABLE_APP_INFO r_edta_localisable_app_info + { + short_caption = STRING_r_hewb_caption_string; + caption_and_icon = + CAPTION_AND_ICON_INFO + { + caption = STRING_r_hewb_caption_string; + + number_of_icons = 1; + icon_file = STRING_r_icon_file_path; + }; + } + +// ---------------------------------------------------------------------------- +// +// r_dialog_text_edit_query +// +// ---------------------------------------------------------------------------- +// +RESOURCE DIALOG r_dialog_text_edit_query + { + flags = EAknGeneralQueryFlags; + buttons = R_AVKON_SOFTKEYS_OK_CANCEL; + items = + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_DATA_QUERY + { + layout = EDataLayout; + label = "Enter dial search string ?"; + control = EDWIN + { + allowed_case_modes = EAknEditorAllCaseModes; + default_case = EAknEditorLowerCase; + allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode; + default_input_mode = EAknEditorTextInputMode; + avkon_flags = EAknEditorFlagNoT9; + width = 32; + maxlength = 32; + lines = 1; + }; + }; + } + }; + } + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/data/edta_reg.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/data/edta_reg.rss Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,35 @@ +/* +* 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: +* +*/ + +#include "edta.rls" +#include +#include + +UID2 KUidAppRegistrationResourceFile +UID3 0x2000FDDC +//UID3 0xA000017F + +RESOURCE APP_REGISTRATION_INFO + { + app_file=STRING_r_app_file; + localisable_resource_file = STRING_r_edta_loc_resource_file_1; + localisable_resource_id = R_EDTA_LOCALISABLE_APP_INFO; + + embeddability=KAppNotEmbeddable; + newfile=KAppDoesNotSupportNewFile; + } + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/gfx/qgn_menu_edta.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/gfx/qgn_menu_edta.svg Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/group/Icons_scalable_dc.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/group/Icons_scalable_dc.mk Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,53 @@ +# +# Copyright (c) 2002-2006 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: This is file for creating .mif file (scalable icon) +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z +else +ZDIR=$(EPOCROOT)epoc32\data\z +endif + +TARGETDIR=$(ZDIR)\resource\apps +ICONTARGETFILENAME=$(TARGETDIR)\edta_aif.mif + +ICONDIR=..\gfx + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +RESOURCE : + mifconv $(ICONTARGETFILENAME) \ + /c32 $(ICONDIR)\qgn_menu_edta.svg + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/group/bld.inf Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,27 @@ +/* +* 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: +* +*/ + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +PRJ_MMPFILES + +gnumakefile icons_scalable_dc.mk + +edta.mmp diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/group/edta.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/group/edta.mmp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,87 @@ +/* +* 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: +* +*/ + +#include + +TARGET edta.exe +TARGETTYPE exe +UID 0x100039CE 0x2000FDDC + +SECUREID 0x2000FDDC +EPOCSTACKSIZE 0x5000 + +SOURCEPATH ..\src +SOURCE edta.cpp +SOURCE edta_application.cpp +SOURCE edta_appview.cpp +SOURCE edta_appui.cpp +SOURCE edta_document.cpp +SOURCE edta_querydialog.cpp +SOURCE edta_screentextbuffer.cpp +SOURCE edta_createtestcontactbase.cpp +SOURCE edta_dummylistener.cpp + + +SOURCEPATH ../data + +START RESOURCE edta.rss +HEADER +TARGETPATH resource/apps +LANG SC 01 09 31 32 +END //RESOURCE + +START RESOURCE edta_reg.rss +TARGETPATH /private/10003a3f/apps +END //RESOURCE + + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE ../../../../../inc + +USERINCLUDE ../inc + +LIBRARY euser.lib +LIBRARY apparc.lib +LIBRARY cone.lib +LIBRARY gdi.lib +LIBRARY eikcore.lib +LIBRARY avkon.lib +LIBRARY bafl.lib +LIBRARY commonengine.lib +LIBRARY efsrv.lib +LIBRARY estor.lib +LIBRARY eikcoctl.lib +LIBRARY eikdlg.lib +LIBRARY PcsUtils.lib +LIBRARY PsServerClientAPI.lib +LIBRARY VPbkEng.lib ccaclient.lib +LIBRARY ecom.lib +LIBRARY cntmodel.lib +LIBRARY pbkeng.lib +LIBRARY servicehandler.lib +LIBRARY centralrepository.lib + +DEBUGLIBRARY flogger.lib + + +VENDORID VID_DEFAULT + +CAPABILITY LocalServices Location NetworkServices ReadDeviceData ReadUserData UserEnvironment WriteDeviceData WriteUserData + +// End of File + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/inc/edta.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/inc/edta.hrh Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,38 @@ +/* +* 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: Easy dialing test application. +* +*/ + +#ifndef __EDTA_HRH__ +#define __EDTA_HRH__ + +// Edta enumerate command codes +enum TEdtaIds + { + EEdtaSetPluginInput = 0x6001, // start value must not be 0 + EEdtaCommandShowContacts, + EEdtaLaunchFirstContact, + EEdtaSelectAndLaunchContact, + EEdtaCommandCheckPCSServer, + EEdtaCommandShowNameOrdering, + EEdtaCommandCreateTestContactBase, + EEdtaCommandTwoConsequtiveSearchesTest, + EEdtaCommandMiscCoverageTest, + EEdtaCommandShowThumbnails, + EEdtaCommandHideThumbnails, + EEdtaCommandLast + }; + +#endif // __EDTA_HRH__ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/inc/edta.pan --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/inc/edta.pan Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2009 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: Easy dialing test application. +* +*/ + +#ifndef __EDTA_PAN__ +#define __EDTA_PAN__ + +#include "edta_debugprint.h" + +/** Edta application panic codes */ +enum TEdtaPanics + { + EEdtaUi = 1, + EEdtaSkinChangePanic = 2, + EEdtaCalculatePanic = 3, + EEdtaFieldNotInitialized = 4 + // add further panics here + }; + +_LIT(KEdtaApplicationName,"Edta"); + +inline void Panic(TEdtaPanics aReason) + { + DebugPrintF(_L("Panic reason: %d"), (TInt) aReason); + User::Panic(KEdtaApplicationName, aReason); + } + +inline void Panic(TEdtaPanics aReason, TDesC aText) + { + DebugPrintF(_L("Panic reason: %d, '%S'"), (TInt) aReason, &aText ); + User::Panic(KEdtaApplicationName, aReason); + } + +#endif // __EDTA_PAN__ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/inc/edta_application.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/inc/edta_application.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,56 @@ +/* +* 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: Easy dialing test application. +* +*/ + +#ifndef __EDTA_APPLICATION_H__ +#define __EDTA_APPLICATION_H__ + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* CEdtaApplication application class. +* Provides factory to create concrete document object. +* An instance of CEdtaApplication is the application part of the +* AVKON application framework for the Edta example application. +*/ +class CEdtaApplication : public CAknApplication + { + public: // Functions from base classes + + /** + * From CApaApplication, AppDllUid. + * @return Application's UID (KUidEdtaApp). + */ + TUid AppDllUid() const; + + protected: // Functions from base classes + + /** + * From CApaApplication, CreateDocumentL. + * Creates document object. The returned + * pointer in not owned by the CEdtaApplication object. + * @return A pointer to the created document object. + */ + CApaDocument* CreateDocumentL(); + }; + +#endif // __EDTA_APPLICATION_H__ + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/inc/edta_appui.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/inc/edta_appui.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,70 @@ +/* +* 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: Easy dialing test application. +* +*/ + +#ifndef __EDTA_APPUI_H__ +#define __EDTA_APPUI_H__ + +// INCLUDES +#include +#include "edta_screentextbuffer.h" + +// FORWARD DECLARATIONS +class CEdtaAppView; +class CAiwServiceHandler; +class CRepository; + +// CLASS DECLARATION +/** +* CEdtaAppUi application UI class. +* Interacts with the user through the UI and request message processing +* from the handler class +*/ +class CEdtaAppUi : public CAknAppUi + { + public: // Constructors and destructor + + void ConstructL(); + CEdtaAppUi(); + virtual ~CEdtaAppUi(); + + TBool CheckPluginLoadedAndShowNote(); + + private: // Functions from base classes + + void HandleCommandL( TInt aCommand ); + void HandleStatusPaneSizeChange(); + void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane); + + protected: + + private: // Data + + CEdtaAppView* iAppView; + + // Contains query text + TBuf iQueryText; + + // OWN: aiw service handler + CAiwServiceHandler* iServiceHandler; + + // own + CRepository* iRepository; + }; + +#endif // __EDTA_APPUI_H__ + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/inc/edta_appview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/inc/edta_appview.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,142 @@ +/* +* 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: Easy dialing test application. +* +*/ + +#ifndef __EDTA_APPVIEW_H__ +#define __EDTA_APPVIEW_H__ + +// INCLUDES +#include "edta_screentextbuffer.h" +#include +#include +#include +#include + + +// FORWARD DECLARATIONS +class CPsClientData; +class CPbkContactEngine; +class CPsQuery; +class CVPbkContactManager; +class CVPbkContactStoreUriArray; +class MVPbkContactLink; +class CPSRequestHandler; +class TCCAFactory; +class MCCAParameter; +class CDialingExtensionInterface; +class CDummyListener; + + + +// CLASS DECLARATION +class CEdtaAppView : public CCoeControl, public MPsResultsObserver, public MCCAObserver, public MDialingExtensionObserver + { + public: // New methods + + static CEdtaAppView* NewL( const TRect& aRect ); + static CEdtaAppView* NewLC( const TRect& aRect ); + virtual ~CEdtaAppView(); + + TInt CountComponentControls() const; + CCoeControl* ComponentControl(TInt aIndex) const; + + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); + + CEdtaScreenTextBuffer* GetScreenBuffer(); + + CDialingExtensionInterface* GetEasyDialer(); + + void ShowMatchingContactsL(const TDesC& aSearchString); + + TBool IsPCSServerLoaded(); + void CheckPCSServerL(); + + void ShowNameOrderL(); + + void LoadPluginL(); + + void LaunchNthContactL(TInt aIx); + + void SelectAndLaunchContactL(); + + void DoMiscellaneousTestsL(); + + public: // Functions from base classes + + virtual void SizeChanged(); + + private: // Constructors + + void ConstructL(const TRect& aRect); + + CEdtaAppView(); + + void Draw( const TRect& aRect ) const; + + void InitContactDataStoreUrisL(); + void InitPredictiveContactSearchL(); + + private: + + //MPsResultsObserver functions + virtual void HandlePsResultsUpdate(RPointerArray& aResults, RPointerArray& aSeqs); + virtual void HandlePsError(TInt aErrorCode); + virtual void CachingStatus(TCachingStatus& aStatus, TInt& aError); + + /** + * Leaving function for Predictive search callback. Call TRAPPED in HandlePsResultsUpdate. + */ + void HandlePredictiveSearchResultL(RPointerArray& aResults, RPointerArray& aSeqs); + + //MCCAObserver functions + void CCASimpleNotifyL( TNotifyType aType, TInt aReason ); + + void HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent ); + + private: + + CEdtaScreenTextBuffer* iScreenBuffer; + + CPSRequestHandler* iPredictiveContactSearchHandler; + + CVPbkContactManager* iContactManager; + + CVPbkContactStoreUriArray* iContactStoreUriArray; + + RPointerArray iContactDataStores; + + RPointerArray iContactNames; + + RPointerArray iMatchingContactLinks; + + CPsQuery* iPredictiveSearchQuery; + + MCCAConnection* iContactLauncher; + + /* + * Pointer to easy dialing plugin. This may be null, if no plugin present. + * Null-check is a must before use. + */ + CDialingExtensionInterface* iEasyDialer; + + CDummyListener* iDummyListener; + + }; + +#endif // __EDTA_APPVIEW_H__ + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/inc/edta_debugprint.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/inc/edta_debugprint.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,83 @@ +/* +* 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: Easy dialing test application. +* +*/ + + +#ifndef __EDTADEBUGPRINT_H__ +#define __EDTADEBUGPRINT_H__ + +// If you want file logging, uncomment the next define. + +#ifdef _DEBUG +// #define USE_FILE_LOGGING +#endif // _DEBUG + +#ifdef USE_FILE_LOGGING +#include +_LIT( KLogDir, "ed" ); +_LIT( KLogFile, "edta.log" ); +#endif + + +// From this point on, internal implementation + +NONSHARABLE_CLASS(TOverflowTruncate) : public TDes16Overflow + { + public: + void Overflow(TDes16& /*aDes*/) {} + }; + +inline void DoDebugPrintF(TRefByValue aFmt, VA_LIST& aList) + { + TBuf<200> buf; + TOverflowTruncate overFlow; + buf.AppendFormatList( aFmt, aList, &overFlow ); + _LIT(KLogPrintFormat,"%S: %S"); // Log printing format + const TDesC& thname = RThread().Name(); // FullName + RDebug::Print( KLogPrintFormat, &thname, &buf ); +#ifdef USE_FILE_LOGGING + RFileLogger::Write(KLogDir, KLogFile, EFileLoggingModeAppend, buf); +#endif + } + +inline void DebugPrintF(const TRefByValue aFmt,...) + { + VA_LIST list; + VA_START(list,aFmt); + DoDebugPrintF(aFmt, list); + } + + +#ifdef _DEBUG + +// These macros are to be used in debug prints +#define DEBUGPRINT(x) DebugPrintF(x) +#define DEBUGPRINT_2(x,y) DebugPrintF(x,y) +#define DEBUGPRINT_3(x,y,z) DebugPrintF(x,y,z) +#define DEBUGPRINT_4(x,y,z,a) DebugPrintF(x,y,z,a) + +#else // _DEBUG + +#define DEBUGPRINT(x) +#define DEBUGPRINT_2(x,y) +#define DEBUGPRINT_3(x,y,z) +#define DEBUGPRINT_4(x,y,z,a) + +#endif // _DEBUG + +#endif // __EDTADEBUGPRINT_H__ + +// End of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/inc/edta_document.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/inc/edta_document.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,99 @@ +/* +* 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: Easy dialing test application. +* +*/ + +#ifndef __EDTA_DOCUMENT_H__ +#define __EDTA_DOCUMENT_H__ + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CEdtaAppUi; +class CEikApplication; + + +// CLASS DECLARATION + +/** +* CEdtaDocument application class. +* An instance of class CEdtaDocument is the Document part of the +* AVKON application framework for the Edta example application. +*/ +class CEdtaDocument : public CAknDocument + { + public: // Constructors and destructor + + /** + * NewL. + * Two-phased constructor. + * Construct a CEdtaDocument for the AVKON application aApp + * using two phase construction, and return a pointer + * to the created object. + * @param aApp Application creating this document. + * @return A pointer to the created instance of CEdtaDocument. + */ + static CEdtaDocument* NewL( CEikApplication& aApp ); + + /** + * NewLC. + * Two-phased constructor. + * Construct a CEdtaDocument for the AVKON application aApp + * using two phase construction, and return a pointer + * to the created object. + * @param aApp Application creating this document. + * @return A pointer to the created instance of CEdtaDocument. + */ + static CEdtaDocument* NewLC( CEikApplication& aApp ); + + /** + * ~CEdtaDocument + * Virtual Destructor. + */ + virtual ~CEdtaDocument(); + + public: // Functions from base classes + + /** + * CreateAppUiL + * From CEikDocument, CreateAppUiL. + * Create a CEdtaAppUi object and return a pointer to it. + * The object returned is owned by the Uikon framework. + * @return Pointer to created instance of AppUi. + */ + CEikAppUi* CreateAppUiL(); + + private: // Constructors + + /** + * ConstructL + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * CEdtaDocument. + * C++ default constructor. + * @param aApp Application creating this document. + */ + CEdtaDocument( CEikApplication& aApp ); + + }; + +#endif // __EDTA_DOCUMENT_H__ + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/inc/edta_dummylistener.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/inc/edta_dummylistener.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,34 @@ +/* +* 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: Easy dialing test application. +* +*/ + +#ifndef EDTA_DUMMYLISTENER_H_ +#define EDTA_DUMMYLISTENER_H_ + +#include +#include + +class CDummyListener : public CBase, public MDialingExtensionObserver + { +public: + + CDummyListener(); + ~CDummyListener(); + + void HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent ); + }; + +#endif /* EDTA_DUMMYLISTENER_H_ */ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/inc/edta_querydialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/inc/edta_querydialog.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,51 @@ +/* +* 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: Easy dialing test application. +* +*/ + +#ifndef _EDTA_QUERYDIALOG_H +#define _EDTA_QUERYDIALOG_H + + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* CEdtaQueryDialog class. +* This class is used to query the user for text information +*/ +class CEdtaQueryDialog : public CAknTextQueryDialog + { + public: // Constructors and destructor + + CEdtaQueryDialog( TDes& aBuf, const HBufC *aDefInput ); + virtual ~CEdtaQueryDialog() {}; + + + private: // from CEikDialog + + void PreLayoutDynInitL(); + + private: // Data + + HBufC& iDefInput; + }; + +#endif // _EDTA_QUERYDIALOG_H + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/inc/edta_screentextbuffer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/inc/edta_screentextbuffer.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,96 @@ +/* +* 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: Easy dialing test application. +* +*/ + +#ifndef __EDTA_SCREENTEXTBUFFER_H__ +#define __EDTA_SCREENTEXTBUFFER_H__ + +// INCLUDES +#include +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class CEikScrollBarFrame; +class CFont; +class TBidiText; +class CAknsBasicBackgroundControlContext; + +// CONSTANTS +const TInt KEdtaMaxLineWidth = 200; + + +// CLASS DECLARATION +class CEdtaScreenTextBuffer : public CCoeControl, public MEikScrollBarObserver + { + +public: + static CEdtaScreenTextBuffer* NewL( const TRect& aRect ); + static CEdtaScreenTextBuffer* NewLC( const TRect& aRect ); + +public: + CEdtaScreenTextBuffer(); + ~CEdtaScreenTextBuffer(); + + void ConstructL( const TRect& aRect ); + void HandleResourceChange(TInt aType); + void WriteLineL( TRefByValue aText,... ); // text wrapping, was: const TDesC& aText + void DeleteLastLine(TInt aCount = 1); + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aModifiers ); + +protected: + + virtual void FocusChanged(TDrawNow aDrawNow); + +private: + + void SizeChanged(); + + void Draw( const TRect& aRect ) const; + void ActivateL(); + void HandleScrollEventL ( CEikScrollBar* aScrollBar, TEikScrollEvent aEventType); + TTypeUid::Ptr MopSupplyObject(TTypeUid aId); + +private: + void CalculateL(const TRect& aRect); + void UpdateScrollIndicatorL(); + + + +private: // Data + + CArrayPtr* iText; + CArrayFixFlat* iScreenStarts; + TInt iCurrentScreen; + TBool iDoNotShowLastLineAgain; + CGraphicsContext::TTextAlign iTextAlign; + CEikScrollBarFrame* iSBFrame; + const CFont* iFont; // not owned + + TInt iLineWidth; + TInt iBaseLineDelta; + TInt iTopBaseLineX; + TInt iTopBaseLineY; + TInt iLinesPerScreen; + + }; + + +#endif // __EDTA_SCREENTEXTBUFFER_H__ + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/rom/edta.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/rom/edta.iby Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 2009 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: +* +*/ +#ifndef __EDTA_IBY__ +#define __EDTA_IBY__ + +#include + +file=ABI_DIR\BUILD_DIR\edta.exe PROGRAMS_DIR\edta.exe +S60_APP_AIF_ICONS(edta) +S60_UPGRADABLE_APP_REG_RSC(edta) +data=\epoc32\data\z\private\2000FDDC\backup_registration.xml \private\2000FDDC\backup_registration.xml + +#endif // __EDTA_IBY__ + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/rom/edta_resources.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/rom/edta_resources.iby Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,25 @@ +/* +* Copyright (c) 2009 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: +* +*/ +#ifndef __EDTA_RESOURCES_IBY__ +#define __EDTA_RESOURCES_IBY__ + +#include + +S60_APP_RESOURCE(edta) + +#endif // __EDTA_RESOURCES_IBY__ + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/sis/backup_registration.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/sis/backup_registration.xml Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,5 @@ + + + + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/sis/edta_armv5.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/sis/edta_armv5.pkg Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,52 @@ +; +; Copyright (c) 2009 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: +; +; Edta_armv5.pkg +; +;Language - standard language definitions +&EN,FI,ZH,JA + +; standard SIS file header +#{"Easy dialing test application", "Easy dialing test application", "Easy dialing test application", "Easy dialing test application"},(0x2000FDDC),1,0,0 + +;Localised Vendor name +%{"Nokia", "Nokia", "Nokia", "Nokia"} + +;Unique Vendor name +:"Nokia" + +;Supports Series 60 v 3.0 +[0x101F7961], 0, 0, 0, {"S60ProductID", "S60ProductID", "S60ProductID", "S60ProductID"} + +;Supports Series 60 v 5.0 +[0x1028315F], 0, 0, 0, {"Series605thProductID","Series605thProductID","Series605thProductID","Series605thProductID"} + +;ErrRD Support: +"\epoc32\data\z\private\10003a3f\apps\edta_reg.rsc" - "C:\resource\ErrRd" + +;Files to install +"\epoc32\release\armv5\urel\Edta.exe" -"!:\sys\bin\edta.exe" + +"\epoc32\data\z\resource\apps\edta.rsc" -"!:\resource\apps\edta.rsc" +"\epoc32\data\z\resource\apps\edta.r09" -"!:\resource\apps\edta.r09" +"\epoc32\data\z\resource\apps\edta.r31" -"!:\resource\apps\edta.r31" +"\epoc32\data\z\resource\apps\edta.r32" -"!:\resource\apps\edta.r32" + +"\epoc32\data\z\private\10003a3f\apps\edta_reg.rsc" -"!:\private\10003a3f\import\apps\edta_reg.rsc" +"\epoc32\data\z\resource\apps\edta_aif.mif" -"!:\resource\apps\edta_aif.mif" + +;required for application to be covered by backup/restore facility +"backup_registration.xml" -"!:\private\2000FDDC\backup_registration.xml" + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/sis/edta_armv5_udeb.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/sis/edta_armv5_udeb.pkg Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,52 @@ +; +; Copyright (c) 2009 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: +; +; Edta_armv5.pkg +; +;Language - standard language definitions +&EN,FI,ZH,JA + +; standard SIS file header +#{"Easy dialing test application", "Easy dialing test application", "Easy dialing test application", "Easy dialing test application"},(0x2000FDDC),1,0,0 + +;Localised Vendor name +%{"Nokia", "Nokia", "Nokia", "Nokia"} + +;Unique Vendor name +:"Nokia" + +;Supports Series 60 v 3.0 +[0x101F7961], 0, 0, 0, {"S60ProductID", "S60ProductID", "S60ProductID", "S60ProductID"} + +;Supports Series 60 v 5.0 +[0x1028315F], 0, 0, 0, {"Series605thProductID","Series605thProductID","Series605thProductID","Series605thProductID"} + +;ErrRD Support: +"\epoc32\data\z\private\10003a3f\apps\edta_reg.rsc" - "C:\resource\ErrRd" + +;Files to install +"\epoc32\release\armv5\udeb\Edta.exe" -"!:\sys\bin\edta.exe" + +"\epoc32\data\z\resource\apps\edta.rsc" -"!:\resource\apps\edta.rsc" +"\epoc32\data\z\resource\apps\edta.r09" -"!:\resource\apps\edta.r09" +"\epoc32\data\z\resource\apps\edta.r31" -"!:\resource\apps\edta.r31" +"\epoc32\data\z\resource\apps\edta.r32" -"!:\resource\apps\edta.r32" + +"\epoc32\data\z\private\10003a3f\apps\edta_reg.rsc" -"!:\private\10003a3f\import\apps\edta_reg.rsc" +"\epoc32\data\z\resource\apps\edta_aif.mif" -"!:\resource\apps\edta_aif.mif" + +;required for application to be covered by backup/restore facility +"backup_registration.xml" -"!:\private\2000FDDC\backup_registration.xml" + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/src/edta.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/src/edta.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,38 @@ +/* +* 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: Easy dialing test application. +* +*/ + +// INCLUDE FILES +#include +#include "edta_application.h" + +/** + * factory function to create the Hello World Basic application class + */ +LOCAL_C CApaApplication* NewApplication() + { + return new CEdtaApplication; + } + +/** + * A normal Symbian OS executable provides an E32Main() function which is + * called by the operating system to start the program. + */ +GLDEF_C TInt E32Main() + { + return EikStart::RunApplication( NewApplication ); + } + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/src/edta_application.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/src/edta_application.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,52 @@ +/* +* 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: Easy dialing test application. +* +*/ + +// INCLUDE FILES +#include "edta_document.h" +#include "edta_application.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// UID for the application. +// this should correspond to the uid defined in the mmp file +const TUid KUidEdtaApp = { 0x2000FDDC }; + +// ----------------------------------------------------------------------------- +// CEdtaApplication::CreateDocumentL() +// Creates CApaDocument object +// ----------------------------------------------------------------------------- +// +CApaDocument* CEdtaApplication::CreateDocumentL() + { + // Create an Edta document, and return a pointer to it + return (static_cast + ( CEdtaDocument::NewL( *this ) ) ); + } + +// ----------------------------------------------------------------------------- +// CEdtaApplication::AppDllUid() +// Returns application UID +// ----------------------------------------------------------------------------- +// +TUid CEdtaApplication::AppDllUid() const + { + // Return the UID for the Edta application + return KUidEdtaApp; + } + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/src/edta_appui.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/src/edta_appui.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,310 @@ +/* +* 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: Easy dialing test application. +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "edta.pan" +#include "edta_appui.h" +#include "edta_appview.h" +#include "edta.hrh" +#include "edta_querydialog.h" +#include + + + + +// CONSTANTS +const TInt KSearchStringMaxLen = 64; + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CEdtaAppUi::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CEdtaAppUi::ConstructL() + { + // Initialise app UI with standard value. + BaseConstructL(CAknAppUi::EAknEnableSkin); + + // Create view object + iAppView = CEdtaAppView::NewL( ClientRect() ); + + // TODO: remove? + iServiceHandler = CAiwServiceHandler::NewL(); + + iRepository = CRepository::NewL( KCRUidEasyDialSettings ); + + AddToStackL(iAppView); + } + +// ----------------------------------------------------------------------------- +// CEdtaAppUi::CEdtaAppUi() +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CEdtaAppUi::CEdtaAppUi() + { + // No implementation required + } + +// ----------------------------------------------------------------------------- +// CEdtaAppUi::~CEdtaAppUi() +// Destructor. +// ----------------------------------------------------------------------------- +// +CEdtaAppUi::~CEdtaAppUi() + { + if ( iAppView ) + { + RemoveFromStack(iAppView); + delete iAppView; + iAppView = NULL; + } + delete iServiceHandler; + + if ( iRepository ) + { + // default setting + iRepository->Set(KEasyDialingContactThumbnails, 1); + } + delete iRepository; + } + + +TInt CreateTestContactDatabaseL(); // Should be moved into correct place + +// ----------------------------------------------------------------------------- +// CEdtaAppUi::HandleCommandL() +// Takes care of command handling. +// ----------------------------------------------------------------------------- +// +void CEdtaAppUi::HandleCommandL( TInt aCommand ) + { + DebugPrintF(_L("CEdtaAppUi::HandleCommandL enter: 0x%X"), aCommand ); + + switch( aCommand ) + { + case EEikCmdExit: + case EAknSoftkeyExit: + DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EXIT")); + Exit(); + break; + + case EEdtaSetPluginInput: + { + DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaSetPluginInput")); + + if( CheckPluginLoadedAndShowNote() ) + { + CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL( iQueryText ); + if( dlg->ExecuteLD(R_DIALOG_TEXT_EDIT_QUERY)) + { + if (iAppView->GetEasyDialer()) + { + iAppView->GetEasyDialer()->SetInputL( iQueryText ); + } + } + } + } + break; + + case EEdtaCommandShowContacts: + { + DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaCommandShowContacts")); + + if( iAppView->IsPCSServerLoaded() ) + { + CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL( iQueryText ); + if( dlg->ExecuteLD(R_DIALOG_TEXT_EDIT_QUERY)) + { + iAppView->ShowMatchingContactsL(iQueryText); + } + } + } + break; + + case EEdtaLaunchFirstContact: + { + DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaLaunchFirstContact")); + if( iAppView->IsPCSServerLoaded() ) + iAppView->LaunchNthContactL( 0 ); + } + break; + + case EEdtaSelectAndLaunchContact: + { + DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaSelectAndLaunchContact")); + iAppView->SelectAndLaunchContactL(); + } + break; + + case EEdtaCommandCheckPCSServer: + { + DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaCommandCheckPCSServer")); + if( iAppView->IsPCSServerLoaded() ) + iAppView->CheckPCSServerL(); + } + break; + + case EEdtaCommandShowNameOrdering: + { + DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaCommandShowNameOrdering")); + iAppView->ShowNameOrderL(); + } + break; + + case EEdtaCommandCreateTestContactBase: + { + DebugPrintF(_L("CEdtaAppUi::HandleCommandL: EEdtaCommandCreateTestContactBase")); + TInt newContactsCount = CreateTestContactDatabaseL(); + iAppView->GetScreenBuffer()->WriteLineL(_L("Test contacts updated")); + iAppView->GetScreenBuffer()->WriteLineL(_L("%d new contacts"), newContactsCount ); + } + break; + + case EEdtaCommandTwoConsequtiveSearchesTest: + DebugPrintF(_L("CEdtaAppUi::HandleCommandL: Two search test")); + + if( CheckPluginLoadedAndShowNote() ) + { + CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL( iQueryText ); + if( dlg->ExecuteLD(R_DIALOG_TEXT_EDIT_QUERY)) + { + HBufC* anotherQueryText = HBufC::NewLC( KSearchStringMaxLen ); + TPtr ptr = anotherQueryText->Des(); + + CAknTextQueryDialog* dlg2 = CAknTextQueryDialog::NewL( ptr ); + + if ( dlg2->ExecuteLD(R_DIALOG_TEXT_EDIT_QUERY) ) + { + if (iAppView->GetEasyDialer()) + { + iAppView->GetEasyDialer()->SetInputL( iQueryText ); + iAppView->GetEasyDialer()->SetInputL( ptr ); + } + } + CleanupStack::PopAndDestroy( anotherQueryText ); + } + } + break; + + case EEdtaCommandMiscCoverageTest: + + if (iAppView->GetEasyDialer()) + { + iAppView->DoMiscellaneousTestsL( ); + } + break; + + case EEdtaCommandShowThumbnails: + iRepository->Set(KEasyDialingContactThumbnails, 1); + break; + + case EEdtaCommandHideThumbnails: + iRepository->Set(KEasyDialingContactThumbnails, 0); + break; + + default: + iServiceHandler->ExecuteMenuCmdL( + aCommand, + iServiceHandler->InParamListL(), // No input parameters + iServiceHandler->OutParamListL(), // No output parameters + 0, // No options used. + NULL); // No need for callback + + DebugPrintF(_L("CEdtaAppUi::HandleCommandL: AIW (or unknown) menu command: 0x%X"), aCommand ); + break; + } + + DebugPrintF(_L("CEdtaAppUi::HandleCommandL exit")); + } + + +void CEdtaAppUi::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane) + { + // First, offer menu pane to AIW framework. It might be the case, that the + // user is opening an AIW submenu. In this case, the AIW handles the menu. + if ( iServiceHandler->HandleSubmenuL( *aMenuPane ) ) + { + return; + } + + // Add your normal (non-AIW) menu initialisation code here... + + // Let AIW provider add its menu items to the menu. + iServiceHandler->InitializeMenuPaneL( + *aMenuPane, + aResourceId, + EEdtaCommandLast, + iServiceHandler->InParamListL()); + } + +// ----------------------------------------------------------------------------- +// Called by the framework when the application status pane +// size is changed. Passes the new client rectangle to the +// AppView +// ----------------------------------------------------------------------------- +// +void CEdtaAppUi::HandleStatusPaneSizeChange() + { + iAppView->SetRect( ClientRect() ); + } + + + +// ----------------------------------------------------------------------------- +// Display note id easydialing plugin is not loaded +// ----------------------------------------------------------------------------- +// +TBool CEdtaAppUi::CheckPluginLoadedAndShowNote() + { + TBool plugin_loaded( ETrue ); + + if( !(iAppView->GetEasyDialer()) ) + { + plugin_loaded = EFalse; + TBuf tempStr; + tempStr.Copy(_L("Easydialing plugin not loaded!")); + + TRAP_IGNORE( + { + CAknErrorNote* myNote = new (ELeave) CAknErrorNote(); + myNote->SetTimeout( CAknNoteDialog::ELongTimeout ); + myNote->ExecuteLD( tempStr ); + } + ); + } + + DebugPrintF(_L("CEdtaAppUi::CheckPluginLoadedAndShowNote: Plugin loaded: %d"), plugin_loaded ); + + return plugin_loaded; + } + +// End of File diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/src/edta_appview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/src/edta_appview.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,872 @@ +/* +* 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: Easy dialing test application. +* +*/ + +// INCLUDE FILES +#include +#include +#include "edta_appview.h" +#include "edta_debugprint.h" +#include "edta_dummylistener.h" +#include + +// AVKON components +#include +#include + +// Predictive search header files. +#include +#include +#include +#include +#include +#include + +// Virtual phonebook header files. +#include +#include +#include +// contains virtual phonebook data fields +#include + +// Phonebook engine API +#include + +// CCA Launcher header files. +#include +#include +#include + + +const TInt KEdtaMaximumMatchingCount = 100; +const TInt KEdtaContactCompanyIndex = 2; +const TInt KEdtaContactEmailHomeIndex = 3; +const TInt KEdtaContactEmailWorkIndex = 4; +const TInt KEdtaContactEmailGenIndex = 5; +const TInt KEdtaListBoxGranularity = 5; + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// NewL +// First phase constructor without cleanup stack. +// ----------------------------------------------------------------------------- +// +CEdtaAppView* CEdtaAppView::NewL( const TRect& aRect ) + { + CEdtaAppView* self = CEdtaAppView::NewLC( aRect ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// NewLC +// First phase constructor with cleanup stack. +// ----------------------------------------------------------------------------- +// +CEdtaAppView* CEdtaAppView::NewLC( const TRect& aRect ) + { + CEdtaAppView* self = new ( ELeave ) CEdtaAppView; + CleanupStack::PushL( self ); + self->ConstructL( aRect ); + return self; + } + +// ----------------------------------------------------------------------------- +// ConstructL +// Second phase constructor. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::ConstructL( const TRect& aRect ) + { + DebugPrintF(_L("CEdtaAppView::ConstructL enter, rect: %d, %d - %d, %d"), aRect.iTl.iX, aRect.iTl.iY, aRect.iBr.iX, aRect.iBr.iY ); + + // Create a window for this application view + CreateWindowL(); + + const TDesC& thname = RThread().Name(); + iScreenBuffer = CEdtaScreenTextBuffer::NewL( aRect ); + iScreenBuffer->SetFocus( ETrue ); + iScreenBuffer->WriteLineL(thname); + + LoadPluginL(); + + DebugPrintF(_L("CEdtaAppView::ConstructL: iScreenBuffer: 0x%X, iEasyDialer: 0x%X"), iScreenBuffer, iEasyDialer ); + + if (iEasyDialer) + { + DebugPrintF(_L("CEdtaAppView::ConstructL: Easydialer plugin found, adding observer..") ); + + iEasyDialer->AddObserverL( this ); + iEasyDialer->SetFocus( EFalse ); + + DebugPrintF(_L("CEdtaAppView::ConstructL: Add observer done")); + } + + // Init PCS Server.. + TRAPD( error, InitPredictiveContactSearchL()); + if( error ) + { + DebugPrintF(_L("CEdtaAppView::ConstructL: Failed to load predictive search engine: %d"), error ); + iScreenBuffer->WriteLineL(_L("* PCS Server load fail: %d"), error ); + } + + // Init Communication Launcher.. + TRAP( error, iContactLauncher = TCCAFactory::NewConnectionL()); + if( error ) + { + DebugPrintF(_L("CEdtaAppView::ConstructL: Failed connect communication launcher: %d"), error ); + iScreenBuffer->WriteLineL(_L("* CCA open fail: %d"), error ); + } + + iDummyListener = new ( ELeave ) CDummyListener(); + + // Set the windows size + SetRect( aRect ); + ActivateL(); + + DebugPrintF(_L("CEdtaAppView::ConstructL exit")); + } + +// ----------------------------------------------------------------------------- +// CEdtaAppView +// The C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CEdtaAppView::CEdtaAppView() + { + // No implementation here + } + +// ----------------------------------------------------------------------------- +// ~CEdtaAppView +// The destructor. +// ----------------------------------------------------------------------------- +// +CEdtaAppView::~CEdtaAppView() + { + DebugPrintF(_L("CEdtaAppView::~CEdtaAppView enter, iEasyDialer: 0x%x"), iEasyDialer ); + + delete iDummyListener; + + if (iEasyDialer) + { + iEasyDialer->RemoveObserver( this ); + } + + if (iPredictiveContactSearchHandler) + { + iPredictiveContactSearchHandler->RemoveObserver(this); + } + + delete iEasyDialer; + iContactNames.ResetAndDestroy(); + iMatchingContactLinks.ResetAndDestroy(); + + if (iContactLauncher) + { + iContactLauncher->Close(); + } + + delete iPredictiveSearchQuery; + delete iContactManager; + delete iPredictiveContactSearchHandler; + delete iContactStoreUriArray; + iContactDataStores.ResetAndDestroy(); + + delete iScreenBuffer; + DebugPrintF(_L("CEdtaAppView::~CEdtaAppView exit")); + } + + +// ----------------------------------------------------------------------------- +// Draw +// Draw itself. Clear the canvas. +// ----------------------------------------------------------------------------- +// + +void CEdtaAppView::Draw( const TRect& aRect ) const + { + DebugPrintF(_L("CEdtaAppView::Draw, rect: %d, %d - %d, %d"), aRect.iTl.iX, aRect.iTl.iY, aRect.iBr.iX, aRect.iBr.iY ); + + CWindowGc& gc = SystemGc(); + gc.SetClippingRect( aRect ); + + gc.SetBrushColor( KRgbWhite ); + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + gc.Clear( aRect ); + } + + +// ----------------------------------------------------------------------------- +// SizeChanged +// Called by framework when the view size is changed. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::SizeChanged() + { + DebugPrintF(_L("CEdtaAppView::SizeChanged: iScreenBuffer: 0x%X, iEasyDialer: 0x%X"), iScreenBuffer, iEasyDialer ); + + // Controls must set rects, otherwise not drawn + // If easy dialer plugin is loaded, the controls are reorganized to screen. + if( iEasyDialer ) + { + // Screen buffer occupies upper half of the view. + TRect screen_buffer_rect = iAvkonAppUi->ClientRect(); + screen_buffer_rect.iBr.iY -= (screen_buffer_rect.Height() / 2 ); + TRect easy_dialer_rect(0, screen_buffer_rect.Height(), screen_buffer_rect.Width(), iAvkonAppUi->ClientRect().Height()); + iEasyDialer->SetRect( easy_dialer_rect ); + iScreenBuffer->SetRect(screen_buffer_rect); + } + else if ( iScreenBuffer ) + { + iScreenBuffer->SetRect(iAvkonAppUi->ClientRect()); + } + } + + +// ----------------------------------------------------------------------------- +// CountComponentControls +// ----------------------------------------------------------------------------- +// +TInt CEdtaAppView::CountComponentControls() const + { + return iEasyDialer ? 2 : 1; + } + + +// ----------------------------------------------------------------------------- +// ComponentControl +// ----------------------------------------------------------------------------- +// +CCoeControl* CEdtaAppView::ComponentControl(TInt aIndex) const + { + switch (aIndex) + { + case 0: return iScreenBuffer; + case 1: return iEasyDialer; // Can be null + default: return NULL; + } + } + +// ----------------------------------------------------------------------------- +// OfferKeyEventL +// ----------------------------------------------------------------------------- +// +TKeyResponse CEdtaAppView::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) + { + TKeyResponse handled = EKeyWasNotConsumed; + + if ( iEasyDialer ) + { + handled = iEasyDialer->OfferKeyEventL(aKeyEvent, aType); + } + + if ( handled == EKeyWasNotConsumed ) + { + handled = iScreenBuffer->OfferKeyEventL(aKeyEvent, aType); + } + else + { + handled = EKeyWasConsumed; + } + + return handled; + } + +// ----------------------------------------------------------------------------- +// GetScreenBuffer +// Returns the pointer to the screen buffer of the view. +// ----------------------------------------------------------------------------- +// +CEdtaScreenTextBuffer* CEdtaAppView::GetScreenBuffer() + { + return iScreenBuffer; + } + + +// ----------------------------------------------------------------------------- +// GetEasyDialer +// Returns the pointer to the easy dialer. +// ----------------------------------------------------------------------------- +// +CDialingExtensionInterface* CEdtaAppView::GetEasyDialer() + { + return iEasyDialer; + } + + + +// ----------------------------------------------------------------------------- +// InitContactDataStoreUrisL +// Initialises user contact data store URIs into field iContactDataStores. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::InitContactDataStoreUrisL() + { + HBufC* default_cdb = VPbkContactStoreUris::DefaultCntDbUri().AllocLC(); + User::LeaveIfError(iContactDataStores.Append( default_cdb )); + CleanupStack::Pop( default_cdb ); + + iContactStoreUriArray = CVPbkContactStoreUriArray::NewL(); + iContactStoreUriArray->AppendL(TVPbkContactStoreUriPtr( VPbkContactStoreUris::DefaultCntDbUri() )); + } + + +// ----------------------------------------------------------------------------- +// InitPredictiveContactSearchL +// Initialises predictive contact search. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::InitPredictiveContactSearchL() + { + DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL enter")); + + iPredictiveContactSearchHandler = CPSRequestHandler::NewL(); + iPredictiveContactSearchHandler->AddObserverL(this); + + DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL => CPSRequestHandler::NewL done")); + + InitContactDataStoreUrisL(); + + DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL => InitContactDataStoreUrisL done")); + + iContactManager = CVPbkContactManager::NewL(*iContactStoreUriArray); + + // Put the searched contact fields into array. + RArray contact_fields; + CleanupClosePushL(contact_fields); + + // All supported fields are searched. The supported fiels are specified in cenrep private\10202BE9\2000B5C6. + contact_fields.Append(R_VPBK_FIELD_TYPE_FIRSTNAME); + contact_fields.Append(R_VPBK_FIELD_TYPE_LASTNAME); + contact_fields.Append(R_VPBK_FIELD_TYPE_COMPANYNAME); + contact_fields.Append(R_VPBK_FIELD_TYPE_EMAILHOME); + contact_fields.Append(R_VPBK_FIELD_TYPE_EMAILWORK); + contact_fields.Append(R_VPBK_FIELD_TYPE_EMAILGEN); + + // Create and fill ps settings object. + CPsSettings* ps_settings = CPsSettings::NewL(); + CleanupStack::PushL(ps_settings); + + ps_settings->SetSearchUrisL(iContactDataStores); + ps_settings->SetMaxResults(KEdtaMaximumMatchingCount); + ps_settings->SetSortType(EAlphabetical); + ps_settings->SetDisplayFieldsL(contact_fields); + + // Set the ps settings. + iPredictiveContactSearchHandler->SetSearchSettingsL(*ps_settings); + + DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL => CPSRequestHandler::SetSearchSettingsL done")); + + CleanupStack::PopAndDestroy(ps_settings); + CleanupStack::PopAndDestroy(&contact_fields); + + iPredictiveSearchQuery = CPsQuery::NewL(); + + DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL => CPsQuery::NewL done")); + + DebugPrintF(_L("CEdtaAppView::InitPredictiveContactSearchL exit")); + } + + +// ----------------------------------------------------------------------------- +// void ShowMatchingContacts(const TDesC& aSearchString) +// Starts an asynchronous search for contacts matching to aSearchString. +// The actual displaying of contact is done in callback HandlePsResultsUpdate +// - Hardcode to use ITU keyboard parameters +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::ShowMatchingContactsL(const TDesC& aSearchString) + { + DebugPrintF(_L("CEdtaAppView::ShowMatchingContactsL: enter '%S'"), &aSearchString ); + + iPredictiveSearchQuery->Reset(); + + for(TInt i = 0; i < aSearchString.Length() ;i++) + { + // Add a query item + CPsQueryItem* item = CPsQueryItem::NewL(); + CleanupStack::PushL(item); + + item->SetCharacter( aSearchString[i] ); + item->SetMode( EItut ); + iPredictiveSearchQuery->AppendL(*item); + + // Previous CPsQuery::AppendL takes the ownership of item. + // Do not delete item. + CleanupStack::Pop(item); + } + + // Issue the search. SearchL is asynchronous function => returns immediately. + iPredictiveContactSearchHandler->SearchL(*iPredictiveSearchQuery); + + DebugPrintF(_L("CEdtaAppView::ShowMatchingContactsL: exit")); + } + + +// ----------------------------------------------------------------------------- +// ShowNameOrderL +// Check the name ordering from phonebook engine by using phonebook engine API. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::ShowNameOrderL() + { + DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: enter")); + + CPbkContactEngine* pbkEngine = CPbkContactEngine::NewL(); + CPbkContactEngine::TPbkNameOrder nameOrder = pbkEngine->NameDisplayOrderL(); + + iScreenBuffer->WriteLineL(_L("Phonebook name order is")); + switch ( nameOrder ) + { + case CPbkContactEngine::EPbkNameOrderLastNameFirstName: + DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: The name order is: %d == LastName -> FirstName"), nameOrder ); + iScreenBuffer->WriteLineL(_L("* Last name, first name")); + break; + case CPbkContactEngine::EPbkNameOrderFirstNameLastName: + DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: The name order is: %d == FirstName -> LastName"), nameOrder ); + iScreenBuffer->WriteLineL(_L("* First name, last name")); + break; + case CPbkContactEngine::EPbkNameOrderNotDefined: + DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: The name order is: %d == Not defined"), nameOrder ); + iScreenBuffer->WriteLineL(_L("* Not defined")); + break; + default: + DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: The name order is: %d == Unknown"), nameOrder ); + iScreenBuffer->WriteLineL(_L("* Unknown value: %d"), nameOrder ); + } + + delete pbkEngine; + + DebugPrintF(_L("CEdtaAppView::ShowNameOrderL: exit")); + } + +// ----------------------------------------------------------------------------- +// IsPCSServerLoaded +// Checks if the PCSServer is loaded properly at constructor +// ----------------------------------------------------------------------------- +// +TBool CEdtaAppView::IsPCSServerLoaded() + { + if( !iPredictiveSearchQuery ) + { + DebugPrintF(_L("CEdtaAppView::CheckPCSServerL: PCS server not loaded properly!")); + + TBuf tempStr; + tempStr.Copy(_L("PCS server not loaded!"));; + + TRAP_IGNORE( + { + CAknErrorNote* myNote = new (ELeave) CAknErrorNote(); + myNote->SetTimeout( CAknNoteDialog::ELongTimeout ); + TRAP_IGNORE( myNote->ExecuteLD( tempStr ) ); + } + ); + return EFalse; + } + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CheckPCSServerL +// Checks the configuration of the PCSServer and prints the sortorder of fields. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::CheckPCSServerL() + { + RArray field_order; + CleanupClosePushL(field_order); + + HBufC* default_cdb = VPbkContactStoreUris::DefaultCntDbUri().AllocLC(); + + _LIT(KEdtaField, "*"); + TBuf line(KEdtaField); + + iPredictiveContactSearchHandler->GetDataOrderL(*default_cdb, field_order); + + DebugPrintF(_L("CEdtaAppView::ShowContactFieldOrderL: Number of fields: %d"), field_order.Count() ); + + TInt requiredFieldsCount = 3; + + for ( TInt i = 0; i < field_order.Count(); i++) + { + line.Append((TChar) ' '); + line.AppendNum(field_order[i]); + + if(( field_order[i] == R_VPBK_FIELD_TYPE_FIRSTNAME) || + ( field_order[i] == R_VPBK_FIELD_TYPE_LASTNAME) || + ( field_order[i] == R_VPBK_FIELD_TYPE_COMPANYNAME )) + { + requiredFieldsCount--; + } + } + + CleanupStack::PopAndDestroy( default_cdb ); + CleanupStack::PopAndDestroy( &field_order ); + + iScreenBuffer->WriteLineL(_L("PCS server fields:")); + iScreenBuffer->WriteLineL(line); + + DebugPrintF(_L("CEdtaAppView::ShowContactFieldOrderL: '%S'"), &line ); + + if( requiredFieldsCount == 0 ) + { + DebugPrintF(_L("CEdtaAppView::ShowContactFieldOrderL: All required fields found from PCSServer, configuration is OK")); + iScreenBuffer->WriteLineL(_L("* All required fields found")); + } + else + { + DebugPrintF(_L("CEdtaAppView::ShowContactFieldOrderL: Not all required fields found from PCSServer, configuration is wrong")); + iScreenBuffer->WriteLineL(_L("* PCS server misconfigured!")); + iScreenBuffer->WriteLineL(_L("* Easydialing may not")); + iScreenBuffer->WriteLineL(_L("* match your queries!")); + } + } + + +// ----------------------------------------------------------------------------- +// void LaunchNthContactL(TInt aIx) +// Launches communication launcher for the first contact in the previous +// search. If not contacts found or no search yet done, function does nothing. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::LaunchNthContactL(TInt aIx) + { + if (aIx < 0 || iMatchingContactLinks.Count() <= aIx) + { + DebugPrintF(_L("CEdtaAppView::LaunchNthContactL: No contacts retrieved yet") ); + return; + } + + DebugPrintF(_L("CEdtaAppView::LaunchNthContactL: enter, index: %d, setting parameters.."), aIx ); + + MCCAParameter* launch_parameters = TCCAFactory::NewParameterL(); + CleanupClosePushL( *launch_parameters ); + + launch_parameters->SetConnectionFlag(MCCAParameter::ENormal); + launch_parameters->SetContactDataFlag(MCCAParameter::EContactLink); + + // Pack the contact link and expand it to 16-bit descriptor. + HBufC8* contact8 = iMatchingContactLinks[aIx]->PackLC(); + HBufC16* contact16 = HBufC16::NewLC( contact8->Length() ); + contact16->Des().Copy( contact8->Des() ); + + launch_parameters->SetContactDataL( contact16->Des() ); + + CleanupStack::PopAndDestroy( contact16 ); + CleanupStack::PopAndDestroy( contact8 ); + + DebugPrintF(_L("CEdtaAppView::LaunchNthContactL: launching CCA..")); + + iContactLauncher->LaunchAppL( *launch_parameters, this ); + + // Ownership of parameter transferred to CCA launcher => pop but do not destroy. + CleanupStack::Pop(launch_parameters); // Close parameter + + DebugPrintF(_L("CEdtaAppView::LaunchNthContactL: exit")); + } + + + +// ----------------------------------------------------------------------------- +// void DoMiscellaneousTestsL() +// Does various tests on easy dialing that are difficult to do through normal +// testing. Mainly for coverage testing purposes. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::DoMiscellaneousTestsL() + { + // Coverage tests for observer handling. + iEasyDialer->AddObserverL( iDummyListener ); + iEasyDialer->AddObserverL( NULL ); + iEasyDialer->RemoveObserver( iDummyListener ); + } + +// ----------------------------------------------------------------------------- +// void HandlePsResultsUpdate(RPointerArray& aResult, RPointerArray& aSeqs) +// Searched matching contacts using PCS and shows them on the screen. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::HandlePsResultsUpdate(RPointerArray& aResults, RPointerArray& aSeqs) + { + TRAP_IGNORE( HandlePredictiveSearchResultL(aResults, aSeqs) ); + } + + +// ----------------------------------------------------------------------------- +// void HandlePsError(TInt aErrorCode) +// Called when search error happens. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::HandlePsError(TInt aErrorCode) + { + DebugPrintF(_L("CEdtaAppView::HandlePsError: %d"), aErrorCode ); + + _LIT(KEdtaCachingError, "*** Caching error %d ***"); + TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingError, aErrorCode) ); + + } + + +// ----------------------------------------------------------------------------- +// void CachingStatus(TCachingStatus& aStatus, TInt& aError) +// Called to update caching status. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::CachingStatus(TCachingStatus& aStatus, TInt& aError ) + { + DebugPrintF(_L("CEdtaAppView::CachingStatus: %d"), aError); + + switch (aStatus) + { + case ECachingNotStarted: + { + _LIT(KEdtaCachingStatusStarted, "*** Caching started ***"); + TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingStatusStarted) ); + } + break; + case ECachingInProgress: + { + _LIT(KEdtaCachingStatusInProgress, "*** Caching in progress ***"); + TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingStatusInProgress) ); + } + break; + case ECachingComplete: + { + _LIT(KEdtaCachingStatusComplete, "*** Caching complete ***"); + TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingStatusComplete) ); + } + break; + case ECachingCompleteWithErrors: + { + _LIT(KEdtaCachingStatusCompleteWithErrors, "*** Caching complete with error %d ***"); + TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingStatusCompleteWithErrors, aError) ); + } + break; + default: + { + _LIT(KEdtaCachingStatusUnknown, "*** Unknown caching status %d ***"); + TRAP_IGNORE( iScreenBuffer->WriteLineL(KEdtaCachingStatusUnknown, (TInt) aStatus) ); + } + break; + } + } + + + +// ----------------------------------------------------------------------------- +// void HandlePredictiveSearchResultL(RPointerArray& aResult, RPointerArray& aSeqs) +// Handles predictive search results. A leaving version to be trapped in HandlePsResultsUpdate. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::HandlePredictiveSearchResultL(RPointerArray& aResults, RPointerArray& /* aSeqs */) + { + TInt results = aResults.Count(); + DebugPrintF(_L("CEdtaAppView::HandlePredictiveSearchResultL enter, matching contacts found: %d"), results ); + + iContactNames.ResetAndDestroy(); + iMatchingContactLinks.ResetAndDestroy(); + + // map results to old contact match data + for (TInt i = 0; i < aResults.Count(); i ++) + { + TBuf temp; + _LIT(KEdtaContactFormatString, "%S %S"); + + // Store each contact name into iContactNames. + temp.Format(KEdtaContactFormatString, aResults[i]->Data(0), aResults[i]->Data(1)); + + DebugPrintF(_L("CEdtaAppView::HandlePredictiveSearchResultL: Contact #%d: '%S'"), i+1, &temp ); + + HBufC* contact_name = HBufC::NewL(temp.Length()); + *contact_name = temp; + iContactNames.Append( contact_name ); + + + // Each contact link stored to iMatchingContactLinks, to be possible used later by + // CCA launcher functions. + MVPbkContactLink* link = iPredictiveContactSearchHandler->ConvertToVpbkLinkLC(*(aResults[i]), *iContactManager); + iMatchingContactLinks.Append( link ); + CleanupStack::Pop( link ); + + // Write the contact name to screen buffer + iScreenBuffer->WriteLineL( *contact_name ); + + TUint8 match_mask = aResults[i]->FieldMatch(); + + // Show other search fields only if search matches them. + if (match_mask & (1 << KEdtaContactCompanyIndex)) + { + _LIT(KEdtaContactCompany, "* Company: %S"); + iScreenBuffer->WriteLineL(KEdtaContactCompany, aResults[i]->Data(KEdtaContactCompanyIndex)); + } + if (match_mask & (1 << KEdtaContactEmailHomeIndex)) + { + _LIT(KEdtaContactEmailHome, "* Home e-mail: %S"); + iScreenBuffer->WriteLineL(KEdtaContactEmailHome, aResults[i]->Data(KEdtaContactEmailHomeIndex)); + } + if (match_mask & (1 << KEdtaContactEmailWorkIndex)) + { + _LIT(KEdtaContactEmailWork, "* Work e-mail: %S"); + iScreenBuffer->WriteLineL(KEdtaContactEmailWork, aResults[i]->Data(KEdtaContactEmailWorkIndex)); + } + if (match_mask & (1 << KEdtaContactEmailGenIndex)) + { + _LIT(KEdtaContactEmailGen, "* E-mail: %S"); + iScreenBuffer->WriteLineL(KEdtaContactEmailGen, aResults[i]->Data(KEdtaContactEmailGenIndex)); + } + } + _LIT(KEdtaNumberOfMatchingContacts, "*** %d contacts found! ***"); + iScreenBuffer->WriteLineL(KEdtaNumberOfMatchingContacts, aResults.Count()); + + DebugPrintF(_L("CEdtaAppView::HandlePredictiveSearchResultL exit")); + } + + +// ----------------------------------------------------------------------------- +// HandleDialingExtensionEvent +// +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent ) + { + DebugPrintF(_L("CEdtaAppView::HandleDialingExtensionEvent")); + + if ( aEvent == MDialingExtensionObserver::EFocusChanged ) + { + if ( iEasyDialer->IsFocused() ) + { + iScreenBuffer->SetFocus( EFalse, EDrawNow ); + } + else + { + iScreenBuffer->SetFocus( ETrue, EDrawNow ); + } + } + } + + +// ----------------------------------------------------------------------------- +// SelectAndLaunchContactL +// Shows a list box, the launches CCA launcher for user selected contact. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::SelectAndLaunchContactL() + { + DebugPrintF(_L("CEdtaAppView::SelectAndLaunchContactL enter")); + + // Create list of matched contacts and show them on the screen + + CAknSingleHeadingPopupMenuStyleListBox* listBox = new(ELeave) CAknSingleHeadingPopupMenuStyleListBox; + CleanupStack::PushL( listBox ); + + CAknPopupList* popupList = CAknPopupList::NewL( listBox, + R_AVKON_SOFTKEYS_SELECT_CANCEL, + AknPopupLayouts::EMenuGraphicHeadingWindow ); + CleanupStack::PushL( popupList ); + + listBox->ConstructL( popupList, EAknListBoxSelectionList ); + listBox->CreateScrollBarFrameL( ETrue ); + listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, + CEikScrollBarFrame::EAuto ); + + _LIT( KMatchedContacts, "Matched contacts:" ); + popupList->SetTitleL( KMatchedContacts ); + + // Add items into list + + CDesCArrayFlat* itemArray = new(ELeave)CDesCArrayFlat(KEdtaListBoxGranularity); + CleanupStack::PushL(itemArray); + + _LIT( KListItemSeparator1, ". \t" ); + + for (TInt listIndex = 0; listIndex < iContactNames.Count(); listIndex++ ) + { + TBuf itemString; + itemString.Zero(); + itemString.AppendNum( listIndex+1 ); + itemString.Append( KListItemSeparator1 ); + itemString.Append( *iContactNames[listIndex] ); + + itemArray->AppendL(itemString); + } + + CTextListBoxModel* model = listBox->Model(); + model->SetItemTextArray( itemArray ); + model->SetOwnershipType( ELbmOwnsItemArray ); + CleanupStack::Pop( itemArray ); // Pop itemArray - the listBox model owns this now + + if( popupList->ExecuteLD() ) // Show the list finally + { + if( listBox->CurrentItemIndex() >= 0 ) + { + // Launch communication launcher for selected contact + LaunchNthContactL( listBox->CurrentItemIndex() ); + } + } + + CleanupStack::Pop( popupList ); + CleanupStack::PopAndDestroy( listBox ); + + DebugPrintF(_L("CEdtaAppView::SelectAndLaunchContactL exit")); + } + + +// ----------------------------------------------------------------------------- +// CCASimpleNotifyL +// Implements MCCAObserver notification interface. +// Nothing better to do but show the parameters. +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::CCASimpleNotifyL( TNotifyType aType, TInt aReason ) + { + DebugPrintF(_L("CEdtaAppView::CCASimpleNotifyL: aType: %d, aReason: %d"), (TInt)aType, aReason ); + + _LIT(KEdtaCCAExitReason, "Launcher exit reason %d, %d"); + iScreenBuffer->WriteLineL(KEdtaCCAExitReason, aType, aReason); + } + + +// ----------------------------------------------------------------------------- +// LoadPluginL +// Load the easydialing ECOM plugin +// ----------------------------------------------------------------------------- +// +void CEdtaAppView::LoadPluginL() + { + TRAPD( error, + { + iEasyDialer = CDialingExtensionInterface::NewL(); + iEasyDialer->InitializeL( *this ); + } ); + + if( error ) + { + DebugPrintF(_L("CEdtaAppView::LoadPluginL FAIL, error: %d"), error ); + iScreenBuffer->WriteLineL(_L("* EasyDialing Plugin load fail: %d"), error ); + iEasyDialer = NULL; + } + else + { + iScreenBuffer->WriteLineL(_L("EasyDialing Plugin loaded")); + DebugPrintF(_L("CEdtaAppView::LoadPluginL OK" )); + } + } + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/src/edta_createtestcontactbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/src/edta_createtestcontactbase.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,266 @@ +/* +* 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: Easy dialing test application. +* +*/ + + + +#include +#include +#include +#include +#include +#include "edta_debugprint.h" + + +/* + * Number of contacts in contactdata array. + */ +const TInt nbr_of_contacts = 15; + +/* + * Contact data contains contact data as text strings. + * Each contact takes six line: + * - first name + * - last name + * - cell number + * - home number + * - company name + * - e-mail address + */ +const char* contactdata[] = +{ + "Dummy", + "Contact", + "+1056439939", + "035558756", + "Ericsson", + "dummy.contact@ericsson.sw", + + "Jaakko", + "Helanti", + "+358405287761", + "034447611", + "Nokia", + "jaakko.helanti@nokia.com", + + "Stan", + "Laurel", + "+0104438839992", + "+0104438839000", + "MGM", + "stan.laurel@heaven.com", + + "Oliver", + "Hardy", + "+01078398927", + "+10364537882", + "MGM", + "oliver.hardy@heaven.com", + + "Harold", + "Lloyd", + "+102843947", + "+10290503958", + "Universal", + "harold.lloyd@universal.com", + + "Tauno", + "Palo", + "+358405557631", + "014445466", + "Suomi Filmi", + "tauno.palo@gmail.com", + + "Tea", + "Ista", + "+358475554590", + "018723195", + "Helsingin Kaupungin Teatteri", + "tea.ista@cultureclub.com", + + "Ansa", + "Ikonen", + "+358471134099", + "012388192", + "Suomi Filmi", + "ansa.ikonen@gmail.com", + + "Bertil", + "Nystrom", + "+35866377334", + "074500998", + "Rovaniemen Viuluveistämö", + "bertil.nystrom@rvv.com", + + "", + "Onlylastname", + "+3585556743", + "+35835552727", + "", + "", + + "Onlyfirstname", + "", + "+358405559874", + "035553747", + "", + "", + + "", + "Two-Part Lastname", + "+358405557432", + "", + "", + "", + + "", + "", + "+35866377334", + "074500998", + "Just Companyname", + "john.doe@justcompanyname.com", + + "One", + "Number", + "", + "075553266", + "Idaho", + "", + + "No", + "Number", + "", + "", + "Ericsson", + "no.number@ericsson.com", +}; + + +HBufC* CreateFieldStringL(TInt aIx) + { + const char* str = contactdata[aIx]; + TInt len = 0; + + while (str[len] != '\0') + { + len++; + } + + if ( len == 0 ) + { + return NULL; + } + + HBufC *field = HBufC::NewL( len ); + TPtr des = field->Des(); + des.SetLength( len ); + + for (TInt i = 0; i < len; i++) + { + des[i] = (TChar) str[i]; + } + + return field; + } + + +void AddFieldStringL( CPbkContactItem* aContact, TInt aIx, TInt aFieldId ) + { + HBufC* fieldName = CreateFieldStringL( aIx ); + + if ( fieldName ) + { + CleanupStack::PushL( fieldName ); + aContact->FindField( aFieldId )->TextStorage()->SetTextL( *fieldName ); + CleanupStack::PopAndDestroy(fieldName); + } + } + + +void AddContactL(CPbkContactEngine* engine, TInt aIx) + { + CPbkContactItem* contact = engine->CreateEmptyContactL(); + CleanupStack::PushL( contact ); + + AddFieldStringL( contact, aIx * 6 + 0, EPbkFieldIdFirstName ); + AddFieldStringL( contact, aIx * 6 + 1, EPbkFieldIdLastName ); + AddFieldStringL( contact, aIx * 6 + 2, EPbkFieldIdPhoneNumberMobile ); + AddFieldStringL( contact, aIx * 6 + 3, EPbkFieldIdPhoneNumberGeneral ); + AddFieldStringL( contact, aIx * 6 + 4, EPbkFieldIdCompanyName ); + AddFieldStringL( contact, aIx * 6 + 5, EPbkFieldIdEmailAddress ); + + engine->AddNewContactL( *contact ); + + CleanupStack::PopAndDestroy( contact ); + } + + + +// --------------------------------------------------------- +// CreateTestContactDatabaseL +// +// Creates a test contact database if it hasn't been created yet. +// The existence of test base is done through testing if there +// is a contact matching with word "Dummy". Test data base has +// a contact for Mr Dummy Contact. +// This is the primary function of this file. +// --------------------------------------------------------- +// +TInt CreateTestContactDatabaseL() + { + DebugPrintF(_L("CreateTestContactDatabaseL: Contacts creation started..")); + + CPbkContactEngine* engine = CPbkContactEngine::NewL(); + CleanupStack::PushL( engine ); + + _LIT(KDummyContact, "Dummy"); + + CContactIdArray* findings = engine->FindLC( KDummyContact ); + + // If dummy contact is found, the test database has already been created. + if (findings->Count() > 0) + { + CleanupStack::PopAndDestroy( findings ); + CleanupStack::PopAndDestroy( engine ); + DebugPrintF(_L("CreateTestContactDatabaseL: Database already set up")); + return 0; + } + + CleanupStack::PopAndDestroy( findings ); + + for (TInt i = 0; i < nbr_of_contacts; i++ ) + { + AddContactL( engine, i ); + } + + CleanupStack::PopAndDestroy(engine); + + DebugPrintF(_L("CreateTestContactDatabaseL: Contacts creation completed, number of contacts: %d"), nbr_of_contacts ); + + return nbr_of_contacts; + } + + + + + + + + + + + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/src/edta_document.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/src/edta_document.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,83 @@ +/* +* 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: Easy dialing test application. +* +*/ + +// INCLUDE FILES +#include "edta_appui.h" +#include "edta_document.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CEdtaDocument::NewL() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CEdtaDocument* CEdtaDocument::NewL( CEikApplication& aApp ) + { + CEdtaDocument* self = NewLC( aApp ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CEdtaDocument::NewLC() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CEdtaDocument* CEdtaDocument::NewLC( CEikApplication& aApp ) + { + CEdtaDocument* self = new ( ELeave ) CEdtaDocument( aApp ); + + CleanupStack::PushL( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CEdtaDocument::CEdtaDocument() +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CEdtaDocument::CEdtaDocument( CEikApplication& aApp ) + : CAknDocument( aApp ) + { + // No implementation required + } + +// --------------------------------------------------------------------------- +// CEdtaDocument::~CEdtaDocument() +// Destructor. +// --------------------------------------------------------------------------- +// +CEdtaDocument::~CEdtaDocument() + { + // No implementation required + } + +// --------------------------------------------------------------------------- +// CEdtaDocument::CreateAppUiL() +// Constructs CreateAppUi. +// --------------------------------------------------------------------------- +// +CEikAppUi* CEdtaDocument::CreateAppUiL() + { + // Create the application user interface, and return a pointer to it. + // The framework takes ownership of this object. + return ( static_cast ( new ( ELeave ) CEdtaAppUi ) ); + } + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/src/edta_dummylistener.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/src/edta_dummylistener.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,32 @@ +/* +* 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: Easy dialing test application. +* +*/ + +#include "edta_dummylistener.h" + + +CDummyListener::CDummyListener() + { + } + +CDummyListener::~CDummyListener() + { + } + +void CDummyListener::HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent /* aEvent */ ) + { + + } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/src/edta_querydialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/src/edta_querydialog.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,55 @@ +/* +* 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: Easy dialing test application. +* +*/ + +// INCLUDE FILES + +#include +#include "edta_querydialog.h" + +// ================= MEMBER FUNCTIONS ======================= + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CEdtaQueryDialog::CEdtaQueryDialog( TDes& aBuf, const HBufC *aDefInput ) + : CAknTextQueryDialog( aBuf ) + , iDefInput(*(const_cast (aDefInput))) + { + } + + + +// --------------------------------------------------------- +// CEdtaQueryDialog::PreLayoutDynInitL +// --------------------------------------------------------- +// +void CEdtaQueryDialog::PreLayoutDynInitL() + { + // first we have to execute PreLayoutDynInitL() of the base-class + CAknTextQueryDialog::PreLayoutDynInitL(); + + // acquire pointer to editor-control and set the default input. + CAknQueryControl* control = QueryControl(); + control->SetTextL(iDefInput); + + // enable OK-button, so that default text can be accepted as it is + // without modifying the text + MakeLeftSoftkeyVisible( ETrue ); + } + +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/edta/src/edta_screentextbuffer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/edta/src/edta_screentextbuffer.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,500 @@ +/* +* 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: Easy dialing test application. +* +*/ + +// INCLUDE FILES +#include "edta_screentextbuffer.h" +#include "edta_debugprint.h" +#include "edta.pan" + +#include +#include +#include +#include +#include +#include +#include + + +const TInt KLineWidthCent = 90; // Percent of total screen width +const TInt KHeightMarginCent = 7; // Percent of total height +const TInt KBottomMarginCent = 3; // Percent of total height +const TInt KLineHeightCent = 135; // How many percent is the line height of font height +const TInt KCent = 100; +const TInt KInitialScreenBufferSize = 20; // This many lines is initially allocated to the screen buffer. +const TInt KInitialScreenStartAmount = 5; // This many screen starts are initially allocated to screen buffer. + + +CEdtaScreenTextBuffer* CEdtaScreenTextBuffer::NewL( const TRect& aRect ) + { + CEdtaScreenTextBuffer* self = CEdtaScreenTextBuffer::NewLC( aRect ); + CleanupStack::Pop( self ); + return self; + } + +CEdtaScreenTextBuffer* CEdtaScreenTextBuffer::NewLC( const TRect& aRect ) + { + CEdtaScreenTextBuffer* self = new ( ELeave ) CEdtaScreenTextBuffer; + CleanupStack::PushL( self ); + self->ConstructL( aRect ); + return self; + } + +// constructors +CEdtaScreenTextBuffer::CEdtaScreenTextBuffer() + { + } + +void CEdtaScreenTextBuffer::ConstructL( const TRect& aRect ) + { + CreateWindowL(); + CalculateL(aRect); + ActivateL(); + } + +// destructor +CEdtaScreenTextBuffer::~CEdtaScreenTextBuffer() + { + delete iSBFrame; + delete iScreenStarts; + + if ( iText ) + { + iText->ResetAndDestroy(); + delete iText; + } + } + +void CEdtaScreenTextBuffer::SizeChanged() + { + // TRAP_IGNORE( CalculateL( Rect() ) ); + // DrawDeferred(); + } + + +// ----------------------------------------------------------------------------- +// CEdtaScreenTextBuffer::Draw() +// ----------------------------------------------------------------------------- +void CEdtaScreenTextBuffer::Draw( const TRect& aRect ) const + { + // DebugPrintF(_L("CEdtaScreenTextBuffer::Draw, rect: %d, %d - %d, %d"), aRect.iTl.iX, aRect.iTl.iY, aRect.iBr.iX, aRect.iBr.iY ); + + __ASSERT_DEBUG( iText, Panic(EEdtaFieldNotInitialized,_L("CEdtaScreenTextBuffer::Draw: iText == NULL") )); + __ASSERT_DEBUG( iScreenStarts, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::Draw: iScreenStarts == NULL") )); + __ASSERT_DEBUG( iScreenStarts->Count() > 0, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::Draw: iScreenStarts has zero elements") )); + + CWindowGc& gc = SystemGc(); + + gc.SetBrushColor( KRgbWhite ); + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + gc.Clear( aRect ); + + if ( IsFocused() ) + { + TRect frame( aRect ); + frame.Shrink(3,3); + frame.iBr.iX -= 10; + gc.SetPenColor(KRgbBlack); + gc.SetPenSize( TSize(2,2) ); + TSize cornerRounding(8,8); + gc.DrawRoundRect( frame, cornerRounding ); + } + + gc.UseFont( iFont ); + + // index of the first line on the screen in the text array + TInt firstLine = 0 ; + if((iScreenStarts ) && (iScreenStarts->Count() > iCurrentScreen)) + { + firstLine = ( (*iScreenStarts)[ iCurrentScreen ] ); + } + else + { + firstLine = (*iScreenStarts)[ iScreenStarts->Count() - 1 ]; + } + + // index of the last line on the screen in the text array + TInt lastLine( firstLine + iLinesPerScreen - 1 ); + + gc.SetBrushStyle( CGraphicsContext::ENullBrush ); + + TPoint position( iTopBaseLineX, iTopBaseLineY ); + TPoint topLeft; + TSize rectSize( iLineWidth, iBaseLineDelta +iFont->DescentInPixels() ); + + for ( TInt index = firstLine; index < iText->Count() && index <= lastLine; index++, position.iY += iBaseLineDelta ) + { + HBufC* text = (*iText)[ index ]; + + if ( text ) + { + topLeft = TPoint( position.iX, position.iY-iBaseLineDelta ); + gc.SetPenColor(KRgbBlack); + gc.DrawText( *text, TRect( topLeft, rectSize ), iBaseLineDelta, iTextAlign ); + } + } + + gc.DiscardFont(); + + // DebugPrintF(_L("CEdtaScreenTextBuffer::Draw exit")); + } + + +// ----------------------------------------------------------------------------- +// CEdtaScreenTextBuffer::ActivateL() +// ----------------------------------------------------------------------------- +void CEdtaScreenTextBuffer::ActivateL() + { + CCoeControl::ActivateL(); + UpdateScrollIndicatorL(); + } + + +// ----------------------------------------------------------------------------- +// CEdtaScreenTextBuffer::SetTextL() +// ----------------------------------------------------------------------------- +void CEdtaScreenTextBuffer::WriteLineL(TRefByValue aText,... ) + { + TBuf bufLine; + VA_LIST list; + VA_START(list,aText); + bufLine.FormatList(aText,list); + + if(!bufLine.Length()) + { + iText->AppendL( NULL ); + } + else + { + HBufC* line = HBufC::NewLC(bufLine.Length()); + *line = bufLine; + iText->AppendL( line ); + CleanupStack::Pop(line); + } + + // Updating scrollbars and screen starts etc are moved to UpdateScrollIndicatorL() + + // if text, last line is shown again in next screen + iDoNotShowLastLineAgain = EFalse; + + DrawDeferred(); //New + UpdateScrollIndicatorL(); + } + + +// ----------------------------------------------------------------------------- +// CEdtaScreenTextBuffer::DeleteLastLine() +// ----------------------------------------------------------------------------- +void CEdtaScreenTextBuffer::DeleteLastLine(TInt aCount) + { + __ASSERT_DEBUG( iText, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::DeleteLastLine: iText == NULL") )); + __ASSERT_DEBUG( iText->Count() > 0, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::DeleteLastLine: iText has zero elements") )); + + while (aCount > 0) + { + // Avoiding memory leaks + TInt lastIndex = iText->Count() - 1; + + // The first item in iText cannot be deleted, since UpdateScrollIndicatorL + // relies on there being at least one item. + if (lastIndex > 0) + { + HBufC* text = (*iText)[ lastIndex ]; + delete text; + iText->Delete(lastIndex); + } + --aCount; + } + } + + + +// ----------------------------------------------------------------------------- +// CEdtaScreenTextBuffer::OfferKeyEventL() +// ----------------------------------------------------------------------------- +TKeyResponse CEdtaScreenTextBuffer::OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + __ASSERT_DEBUG(iScreenStarts, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::OfferKeyEventL: iScreenStarts == NULL") )); + __ASSERT_DEBUG(iScreenStarts->Count() > 0, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::OfferKeyEventL: iScreenStarts has zero elements") )); + + if ( aType == EEventKey && iScreenStarts->Count() > 1 ) + { + switch ( aKeyEvent.iCode ) + { + case EKeyUpArrow: + if ( iCurrentScreen > 0 ) + { + iCurrentScreen--; + DrawNow(); + UpdateScrollIndicatorL(); + } + break; + + case EKeyDownArrow: + if ( iCurrentScreen < iScreenStarts->Count() - 1 ) + { + iCurrentScreen++; + DrawNow(); + UpdateScrollIndicatorL(); + } + break; + + default: + return EKeyWasNotConsumed; + } + } + + return EKeyWasConsumed; + } + + + +// ----------------------------------------------------------------------------- +// CEdtaScreenTextBuffer::FocusChanged() +// ----------------------------------------------------------------------------- +void CEdtaScreenTextBuffer::FocusChanged(TDrawNow aDrawNow) + { + if ( aDrawNow == EDrawNow ) + { + DrawNow(); + } + } + + +// ----------------------------------------------------------------------------- +// CEdtaScreenTextBuffer::HandleScrollEventL() +// ----------------------------------------------------------------------------- +void CEdtaScreenTextBuffer::HandleScrollEventL ( CEikScrollBar* aScrollBar, TEikScrollEvent aEventType) + { + //Only on page up/down,scroll up/down and drag events + switch (aEventType) + { + case EEikScrollPageDown: + case EEikScrollPageUp: + case EEikScrollThumbDragVert: + case EEikScrollUp: + case EEikScrollDown: + + iCurrentScreen = aScrollBar->ThumbPosition(); + + //Refresh now + DrawNow(); + UpdateScrollIndicatorL(); + break; + } + } + +// ----------------------------------------------------------------------------- +// CEdtaScreenTextBuffer::UpdateScrollIndicatorL() +// +// This function assumes that +// - iText exists and has at least one element. +// - iScreenStarts exist and has at least one element. +// These conditions are met if CalculateL / ConstructL has been called. +// ----------------------------------------------------------------------------- +void CEdtaScreenTextBuffer::UpdateScrollIndicatorL() + { + __ASSERT_DEBUG( iText, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::UpdateScrollIndicatorL: iText == NULL") )); + __ASSERT_DEBUG( iText->Count() > 0, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::UpdateScrollIndicatorL: iText has zero elements") )); + __ASSERT_DEBUG( iScreenStarts, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::UpdateScrollIndicatorL: iScreenStarts == NULL") )); + __ASSERT_DEBUG( iScreenStarts->Count() > 0, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::UpdateScrollIndicatorL: iScreenStarts has zero elements") )); + + TInt lastLine( iText->Count() - 1 ); + TInt screenStart( (*iScreenStarts)[ iScreenStarts->Count() - 1 ] ); + + TBool firstNewScreenHandled( EFalse ); + + while ( lastLine >= screenStart + iLinesPerScreen ) + { + if ( !firstNewScreenHandled && iDoNotShowLastLineAgain ) + { + screenStart++; + firstNewScreenHandled = ETrue; + } + + // If the shows screen is the last on, scroll the view along with new lines. + if (iCurrentScreen == iScreenStarts->Count() - 1) + { + iCurrentScreen++; + } + + screenStart += iLinesPerScreen - 1; + iScreenStarts->AppendL( screenStart ); + } + + if ( !iSBFrame ) + { + iSBFrame = new( ELeave ) CEikScrollBarFrame( this, NULL, ETrue ); + + iSBFrame->CreateDoubleSpanScrollBarsL(ETrue, EFalse); // non-window owning scrollbar + iSBFrame->SetTypeOfVScrollBar(CEikScrollBarFrame::EDoubleSpan); + + iSBFrame->SetScrollBarFrameObserver(this); + iSBFrame->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto); + } + + TEikScrollBarModel vSbarModel; + vSbarModel.iThumbPosition = iCurrentScreen; + vSbarModel.iScrollSpan = iScreenStarts->Count(); + vSbarModel.iThumbSpan = 1; + + TRect rect(Rect()); + TEikScrollBarFrameLayout layout; + layout.iTilingMode = TEikScrollBarFrameLayout::EInclusiveRectConstant; + + // For EDoubleSpan type scrollbar + if (vSbarModel.iThumbPosition + vSbarModel.iThumbSpan > vSbarModel.iScrollSpan) + { + // Not let scrollbar values overflow + vSbarModel.iThumbPosition = vSbarModel.iScrollSpan - vSbarModel.iThumbSpan; + } + + TAknDoubleSpanScrollBarModel vDsSbarModel(vSbarModel); + iSBFrame->TileL(NULL, &vDsSbarModel, rect, rect, layout); + iSBFrame->SetVFocusPosToThumbPos(vDsSbarModel.FocusPosition()); + } + + +// ----------------------------------------------------------------------------- +// CEdtaScreenTextBuffer::CalculateL() +// Needs to be called in construction, and whenever layout changes. +// Screen orientation change, etc. +// ----------------------------------------------------------------------------- +void CEdtaScreenTextBuffer::CalculateL(const TRect& aRect) + { + // DebugPrintF(_L("CEdtaScreenTextBuffer::CalculateL, rect: %d, %d - %d, %d"), aRect.iTl.iX, aRect.iTl.iY, aRect.iBr.iX, aRect.iBr.iY ); + + TRect rect(0,0,0,0); + + iCurrentScreen = 0; + + iFont = AknLayoutUtils::FontFromId(EAknLogicalFontSecondaryFont); + + // Calculate various text positioning parameters + iBaseLineDelta = iFont->HeightInPixels() * KLineHeightCent / KCent; + + TInt mainPaneWidth( aRect.iBr.iX - aRect.iTl.iX ); + TInt mainPaneHeight( aRect.iBr.iY - aRect.iTl.iY ); + // Line width is 90% (by default) of client rect, and horizontal margins 10% + iLineWidth = mainPaneWidth * KLineWidthCent / KCent; + + iTopBaseLineX = ( mainPaneWidth - iLineWidth ) / 2; + + // top margin is 7% (by default) of the client rect + TInt topMargin = mainPaneHeight * KHeightMarginCent / KCent; + iTopBaseLineY = topMargin + iFont->AscentInPixels(); + + // minimum bottom margin is 3% (by default) of the client rect + TInt bottomMargin = mainPaneHeight * KBottomMarginCent / KCent; + iLinesPerScreen = + ( mainPaneHeight - topMargin - bottomMargin ) / iBaseLineDelta; + + iTextAlign = CGraphicsContext::ELeft; + + // Text must not be deleted, otherwise all accumulated data will be lost. + if ( !iText ) + { + // Every text line on screen is one entry in this array + iText = new( ELeave ) CArrayPtrFlat( KInitialScreenBufferSize ); + iText->AppendL(NULL); // Extra newline for visual reasons + } + + if ( iScreenStarts ) + { + delete iScreenStarts; + iScreenStarts = NULL; + } + + + // This array contains indices for lines that start the subsequent + // screens, for custom scrolling + iScreenStarts = new( ELeave ) CArrayFixFlat( KInitialScreenStartAmount ); + // Initialisation: first screen starts at line 0. + iScreenStarts->AppendL( 0 ); + + if ( iSBFrame ) + { + delete iSBFrame; + iSBFrame = NULL; + } + + UpdateScrollIndicatorL(); + } + + +// ----------------------------------------------------------------------------- +// CEdtaScreenTextBuffer::HandleResourceChange() +// ----------------------------------------------------------------------------- +void CEdtaScreenTextBuffer::HandleResourceChange(TInt aType) + { + switch ( aType ) + { + case KEikDynamicLayoutVariantSwitch : + { + TRAPD( error, CalculateL( iAvkonAppUi->ClientRect() )); + + if( error != KErrNone ) + { + DebugPrintF(_L("CEdtaScreenTextBuffer::HandleResourceChange: CalculateL -method failed: %d"), error ); + } + else + { + DrawNow(); + } + } + break; + + case KAknsMessageSkinChange : + { + __ASSERT_DEBUG(iSBFrame, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::HandleResourceChange: iSBFrame == NULL") )); + + TRAPD( error, + { + iSBFrame->CreateDoubleSpanScrollBarsL(ETrue, EFalse); // window owning scrollbar + iSBFrame->SetTypeOfVScrollBar(CEikScrollBarFrame::EDoubleSpan); + iSBFrame->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EOn); + UpdateScrollIndicatorL(); + } + ); + + if( error != KErrNone ) + { + DebugPrintF(_L("CEdtaScreenTextBuffer::HandleResourceChange: Create ScrollBars failed: %d"), error ); + __ASSERT_DEBUG( error == KErrNone, Panic(EEdtaFieldNotInitialized, _L("CEdtaScreenTextBuffer::HandleResourceChange => Skin change caused panic") )); + } + } + + default: + { + CCoeControl::HandleResourceChange(aType); + } + break; + } + } + + +// --------------------------------------------------------- +// CEdtaScreenTextBuffer::MopSupplyObject() +// Pass skin information if need. +// --------------------------------------------------------- +TTypeUid::Ptr CEdtaScreenTextBuffer::MopSupplyObject(TTypeUid aId) + { + return CCoeControl::MopSupplyObject(aId); + } + + +// End of file diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/t_easydialingplugin/group/UT_easydialingplugin.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/group/UT_easydialingplugin.mmp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,153 @@ +/* +* 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: Project file +* +*/ + + +#include +#include "data_caging_paths.hrh" +#include "../../../inc/easydialingconstants.hrh" + +// DEFINES +#define KMyUniqueUid3 0x200212A2 +#define KEUnitTestDllUid2 0x1000af5a + +// Build target +TARGET UT_easydialingplugin.dll +TARGETTYPE dll +UID KEUnitTestDllUid2 KMyUniqueUid3 + +CAPABILITY ALL -TCB +VENDORID 0x101FB657 + +// Source files +SOURCEPATH ../src +SOURCE DllMain.cpp // Test code +SOURCE CEasyDialingPlugin_Test.cpp +SOURCE createtestcontactbase.cpp +SOURCE dummyparentcontrol.cpp + +SOURCEPATH ../../../src +SOURCE easydialingplugin.cpp +SOURCE easydialinglistbox.cpp +SOURCE easydialinglistboxdata.cpp +SOURCE easydialinglistboxitemdrawer.cpp +SOURCE easydialinglistboxview.cpp +SOURCE easydialingcenreplistener.cpp +SOURCE easydialingcontactdata.cpp +SOURCE easydialingcontactdatamanager.cpp +SOURCE easydialingutils.cpp + +// Code under test + +// Include paths +USERINCLUDE ../inc +USERINCLUDE ../../../inc +USERINCLUDE ../../../traces +USERINCLUDE ../../../edcontactor/inc + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/Digia/EUnit +SYSTEMINCLUDE /epoc32/include/internal +SYSTEMINCLUDE /epoc32/include/ecom + +SOURCEPATH ../../../data + +START RESOURCE 200212A0.rss + LANG SC + TARGET easydialingplugin.rsc +END + +START RESOURCE easydialingpluginresources.rss + HEADER + TARGETPATH \resource + TARGET easydialingpluginresources.rsc + LANGUAGE_IDS +END + + +// Symbian framework libraries + +LIBRARY euser.lib +LIBRARY ECom.lib +LIBRARY cone.lib +LIBRARY ws32.lib +LIBRARY eikctl.lib +LIBRARY eikcore.lib +LIBRARY eikcoctl.lib +LIBRARY bafl.lib +LIBRARY gdi.lib +LIBRARY egul.lib +LIBRARY apgrfx.lib +LIBRARY fbscli.lib +LIBRARY efsrv.lib +LIBRARY cntmodel.lib +LIBRARY bitgdi.lib +LIBRARY etext.lib + +// Avkon, Avkon skin and Avkon layout libraries. +LIBRARY avkon.lib +LIBRARY aknicon.lib +LIBRARY aknlistloadertfx.lib +LIBRARY aknskins.lib +LIBRARY aknskinsrv.lib +LIBRARY aknswallpaperutils.lib +LIBRARY aknlayout2scalable.lib +LIBRARY cdlengine.lib +LIBRARY aknlayout2.lib + +// AIW library +LIBRARY servicehandler.lib + +// Predictive search libraries +LIBRARY PcsUtils.lib +LIBRARY PsServerClientAPI.lib + +// Virtual phonebook library +LIBRARY VPbkEng.lib + +// Phonebook engine +LIBRARY pbkeng.lib + +// ECE Communication launcher library +LIBRARY ccaclient.lib + +// Central repository +LIBRARY centralrepository.lib +LIBRARY commonengine.lib +LIBRARY cenrepnotifhandler.lib + +// CPbk2ImageManager +LIBRARY pbk2presentation.lib + +// bitmap handling +LIBRARY bitmaptransforms.lib + +// Easy dialing own contactor module. +LIBRARY edcontactor.lib + +// CMS library used for getting information about contacts. +//LIBRARY cmsclient.lib + +// Service provider settings api +LIBRARY serviceprovidersettings.lib + +// Libraries used for R&D purposes only +DEBUGLIBRARY flogger.lib + +// EasyDialing Eunit Test libarary +LIBRARY eunit.lib +// End of File + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/t_easydialingplugin/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/group/bld.inf Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,29 @@ +/* +* 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: Bld.inf +* +*/ + + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +PRJ_TESTMMPFILES +UT_easydialingplugin.mmp + +//PRJ_MMPFILES + +//UT_easydialingplugin.mmp diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/t_easydialingplugin/inc/CEasyDialingPlugin_Test.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/inc/CEasyDialingPlugin_Test.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,84 @@ +/* +* Copyright (c) 2009 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: +* +*/ +/* +----------------------------------------------------------------------------- +This file has been generated with EUnit Pro +http://www.digia.com/eunit +----------------------------------------------------------------------------- +*/ +#ifndef __CEASYDIALINGPLUGIN_TEST_H__ +#define __CEASYDIALINGPLUGIN_TEST_H__ + +// INCLUDES +#include +#include +#include "easydialingplugin.h" + +// FORWARD DECLARATIONS + +class CDummyParentControl; + +/** + * Generated EUnit test suite class. + */ +NONSHARABLE_CLASS( CEasyDialingPlugin_Test ) : public CEUnitTestSuiteClass, public MDialingExtensionObserver + { + public: // Constructors and destructor + + static CEasyDialingPlugin_Test* NewL(); + static CEasyDialingPlugin_Test* NewLC(); + ~CEasyDialingPlugin_Test(); + + void HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent ); + + private: // Constructors + + CEasyDialingPlugin_Test(); + void ConstructL(); + + private: // New methods + + void SetupL(); + + void Teardown(); + + void T_Global_OfferKeyEventLL(); + + void T_Global_Search1(); + void T_Global_Search2(); + void T_Global_Search3(); + void T_Global_Search4(); + void T_Global_Search5(); + void T_Global_Search6(); + void T_Global_Search7(); + void T_Global_Search8(); + + void T_Global__CEasyDialingPluginL(); + + private: // Data + + CEasyDialingPlugin* iCEasyDialingPlugin; + + CActiveSchedulerWait* iWait; + + CDummyParentControl* iDummyParentControl; + + EUNIT_DECLARE_TEST_TABLE; + + }; + +#endif // __CEASYDIALINGPLUGIN_TEST_H__ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/t_easydialingplugin/inc/dummyparentcontrol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/inc/dummyparentcontrol.h Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,39 @@ +/* +* 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: EUnit test file. +* +*/ + +#ifndef DUMMYPARENTCONTROL_H_ +#define DUMMYPARENTCONTROL_H_ + +#include + +class CDummyParentControl : public CCoeControl + { +public: + + static CDummyParentControl* NewL(); + + ~CDummyParentControl(); + +private: + + CDummyParentControl(); + + void ConstructL(); + + }; + +#endif /* DUMMYPARENTCONTROL_H_ */ diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/t_easydialingplugin/src/CEasyDialingPlugin_Test.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/src/CEasyDialingPlugin_Test.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,314 @@ +/* +* Copyright (c) 2009 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: +* +*/ +/* +----------------------------------------------------------------------------- +This file has been generated with EUnit Pro +http://www.digia.com/eunit +----------------------------------------------------------------------------- +*/ +#include "CEasyDialingPlugin_Test.h" +#include +#include +#include +#include + +#include "easydialingplugin.h" +#include "dummyparentcontrol.h" + +#include +#include +#include +#include + + +// - Construction ----------------------------------------------------------- + +CEasyDialingPlugin_Test* CEasyDialingPlugin_Test::NewL() + { + CEasyDialingPlugin_Test* self = CEasyDialingPlugin_Test::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +CEasyDialingPlugin_Test* CEasyDialingPlugin_Test::NewLC() + { + CEasyDialingPlugin_Test* self = new( ELeave ) CEasyDialingPlugin_Test(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +CEasyDialingPlugin_Test::~CEasyDialingPlugin_Test() + { + RDebug::Print(_L("EDTest: enter desctructor")); + + if (iCEasyDialingPlugin) + { + iCEasyDialingPlugin->RemoveObserver( this ); + } + delete iWait; + delete iCEasyDialingPlugin; + delete iDummyParentControl; + RDebug::Print(_L("EDTest: exit desctructor")); + } + +CEasyDialingPlugin_Test::CEasyDialingPlugin_Test() + { + } + + +TInt CreateTestContactDatabaseL(); + +void CEasyDialingPlugin_Test::ConstructL() + { + CEUnitTestSuiteClass::ConstructL(); + CreateTestContactDatabaseL(); + iWait = new( ELeave )CActiveSchedulerWait(); + iDummyParentControl = CDummyParentControl::NewL(); + + iCEasyDialingPlugin = CEasyDialingPlugin::NewL(); + iCEasyDialingPlugin->InitializeL( *iDummyParentControl ); + iCEasyDialingPlugin->AddObserverL( this ); + + + RDebug::Print(_L("EDTest:Construct plugin exit")); + } + + +void CEasyDialingPlugin_Test::HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent ) + { + if ( aEvent == MDialingExtensionObserver::ESearchComplete ) + { + iWait->AsyncStop(); + } + } + +// - Test methods ----------------------------------------------------------- + + + +void CEasyDialingPlugin_Test::SetupL( ) + { + } + + +void CEasyDialingPlugin_Test::Teardown( ) + { + } + + +void CEasyDialingPlugin_Test::T_Global_OfferKeyEventLL( ) + { + + TKeyEvent ke; + ke.iCode = 32; + ke.iModifiers = 0; + ke.iRepeats = 0; + ke.iScanCode = 32; + + iCEasyDialingPlugin->OfferKeyEventL( ke, EEventKey ); + EUNIT_ASSERT_DESC( iCEasyDialingPlugin, "OfferKeyEventL general assert"); + + } + + +// ----------------------------------------------------------------------------- +// T_Global_Search* +// These functions do all kind of searches with easy dialing and check that +// the count of matching contacts is right. These tests require that a specific +// test contact data base has been created with CreateTestContactDatabaseL(). +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin_Test::T_Global_Search1( ) + { + TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("A") )); + iWait->Start(); + // Now execution stops here until HandleDialingExtensionEvent has been called. + + TInt count = iCEasyDialingPlugin->MatchingContactCount(); + EUNIT_ASSERT_EQUALS( count, 1 ); + } + +void CEasyDialingPlugin_Test::T_Global_Search2() + { + TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("b") )); + iWait->Start(); + // Now execution stops here until HandleDialingExtensionEvent has been called. + + TInt count = iCEasyDialingPlugin->MatchingContactCount(); + EUNIT_ASSERT_EQUALS( count, 1 ); + } + +void CEasyDialingPlugin_Test::T_Global_Search3() + { + TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("C") )); + iWait->Start(); + // Now execution stops here until HandleDialingExtensionEvent has been called. + + TInt count = iCEasyDialingPlugin->MatchingContactCount(); + EUNIT_ASSERT_EQUALS( count, 2 ); + } + +void CEasyDialingPlugin_Test::T_Global_Search4() + { + TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("2") )); + iWait->Start(); + // Now execution stops here until HandleDialingExtensionEvent has been called. + + TInt count = iCEasyDialingPlugin->MatchingContactCount(); + EUNIT_ASSERT_EQUALS( count, 4 ); + } + +void CEasyDialingPlugin_Test::T_Global_Search5() + { + TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("3") )); + iWait->Start(); + // Now execution stops here until HandleDialingExtensionEvent has been called. + + TInt count = iCEasyDialingPlugin->MatchingContactCount(); + EUNIT_ASSERT_EQUALS( count, 4 ); + } + +void CEasyDialingPlugin_Test::T_Global_Search6() + { + TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("8286607") )); // should match to alo + iWait->Start(); + // Now execution stops here until HandleDialingExtensionEvent has been called. + + TInt count = iCEasyDialingPlugin->MatchingContactCount(); + EUNIT_ASSERT_EQUALS( count, 1 ); + } + +void CEasyDialingPlugin_Test::T_Global_Search7() + { + TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("5569304") )); // should match to arold + iWait->Start(); + // Now execution stops here until HandleDialingExtensionEvent has been called. + + TInt count = iCEasyDialingPlugin->MatchingContactCount(); + EUNIT_ASSERT_EQUALS( count, 1 ); + } + +void CEasyDialingPlugin_Test::T_Global_Search8() + { + TRAP_IGNORE( iCEasyDialingPlugin->SetInputL( _L("3456407") )); // should match to uomi + iWait->Start(); + // Now execution stops here until HandleDialingExtensionEvent has been called. + + TInt count = iCEasyDialingPlugin->MatchingContactCount(); + EUNIT_ASSERT_EQUALS( count, 2 ); + } + + + +// ----------------------------------------------------------------------------- +// T_Global__CEasyDialingPluginL +// Destructor test +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin_Test::T_Global__CEasyDialingPluginL( ) + { + iCEasyDialingPlugin->~CEasyDialingPlugin(); + iCEasyDialingPlugin = NULL; + iCEasyDialingPlugin = CEasyDialingPlugin::NewL(); + EUNIT_ASSERT_DESC( ETrue, "Generated assert, replace with real"); + } + + + + + + + +// - EUnit test table ------------------------------------------------------- + +EUNIT_BEGIN_TEST_TABLE( + CEasyDialingPlugin_Test, + "Easy dialing plugin test", + "UNIT" ) + +EUNIT_TEST( + "OfferKeyEventL", + "CEasyDialingPlugin", + "OfferKeyEventL", + "FUNCTIONALITY", + SetupL, T_Global_OfferKeyEventLL, Teardown) + +EUNIT_TEST( + "SetInputLL", + "CEasyDialingPlugin", + "SetInputLL", + "FUNCTIONALITY", + SetupL, T_Global_Search1, Teardown) + +EUNIT_TEST( + "Tests matching contact count function.", + "CEasyDialingPlugin_Test", + "MatchingContactCount", + "FUNCTIONALITY", + SetupL, T_Global_Search2, Teardown ) + +EUNIT_TEST( + "PCS search test function", + "CEasyDialingPlugin_Test", + "", + "FUNCTIONALITY", + SetupL, T_Global_Search3, Teardown ) + +EUNIT_TEST( + "PCS search test function", + "CEasyDialingPlugin_Test", + "", + "FUNCTIONALITY", + SetupL, T_Global_Search4, Teardown ) + +EUNIT_TEST( + "PCS search test function", + "CEasyDialingPlugin_Test", + "", + "FUNCTIONALITY", + SetupL, T_Global_Search5, Teardown ) + +EUNIT_TEST( + "PCS search test function", + "CEasyDialingPlugin_Test", + "", + "FUNCTIONALITY", + SetupL, T_Global_Search6, Teardown ) + +EUNIT_TEST( + "PCS search test function", + "CEasyDialingPlugin_Test", + "", + "FUNCTIONALITY", + SetupL, T_Global_Search7, Teardown ) + +EUNIT_TEST( + "PCS search test function", + "CEasyDialingPlugin_Test", + "", + "FUNCTIONALITY", + SetupL, T_Global_Search8, Teardown ) + +EUNIT_TEST( + "~CEasyDialingPlugin", + "CEasyDialingPlugin", + "~CEasyDialingPlugin", + "FUNCTIONALITY", + SetupL, T_Global__CEasyDialingPluginL, Teardown) + +EUNIT_END_TEST_TABLE diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/t_easydialingplugin/src/DllMain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/src/DllMain.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,34 @@ +/* +* 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: EUnit test file. +* +*/ +// EXTERNAL INCLUDES +#include +#include "CEasyDialingPlugin_Test.h" + +/** +* T_HelloWorld.dll test suite factory function. +*/ +EXPORT_C MEUnitTest* CreateTestSuiteL() + { + CEasyDialingPlugin_Test* rootSuite = CEasyDialingPlugin_Test::NewL(); + + if (rootSuite == NULL) + { + User::Panic(_L("Koe"), 3); + } + + return rootSuite; + } diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/t_easydialingplugin/src/createtestcontactbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/src/createtestcontactbase.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,260 @@ +/* +* 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: EUnit test file. +* +*/ + + + +#include +#include +#include +#include +#include + + +HBufC* CreateFieldStringL(char* contactdata[], TInt aIx) + { + char* str = contactdata[aIx]; + TInt len = 0; + + while (str[len] != '\0') + { + len++; + } + + if ( len == 0 ) + { + return NULL; + } + + HBufC *field = HBufC::NewL( len ); + TPtr des = field->Des(); + des.SetLength( len ); + + for (TInt i = 0; i < len; i++) + { + des[i] = (TChar) str[i]; + } + + return field; + } + + +void AddFieldStringL( char* contactdata[], CPbkContactItem* aContact, TInt aIx, TInt aFieldId ) + { + HBufC* fieldName = CreateFieldStringL( contactdata, aIx ); + + if ( fieldName ) + { + CleanupStack::PushL( fieldName ); + aContact->FindField( aFieldId )->TextStorage()->SetTextL( *fieldName ); + CleanupStack::PopAndDestroy(fieldName); + } + } + + +void AddContactL( char* contactdata[], CPbkContactEngine* engine, TInt aIx) + { + CPbkContactItem* contact = engine->CreateEmptyContactL(); + CleanupStack::PushL( contact ); + + AddFieldStringL( contactdata, contact, aIx * 6 + 0, EPbkFieldIdFirstName ); + AddFieldStringL( contactdata, contact, aIx * 6 + 1, EPbkFieldIdLastName ); + AddFieldStringL( contactdata, contact, aIx * 6 + 2, EPbkFieldIdPhoneNumberMobile ); + AddFieldStringL( contactdata, contact, aIx * 6 + 3, EPbkFieldIdPhoneNumberGeneral ); + AddFieldStringL( contactdata, contact, aIx * 6 + 4, EPbkFieldIdCompanyName ); + AddFieldStringL( contactdata, contact, aIx * 6 + 5, EPbkFieldIdEmailAddress ); + + engine->AddNewContactL( *contact ); + + CleanupStack::PopAndDestroy( contact ); + } + + + +// --------------------------------------------------------- +// CreateTestContactDatabaseL +// +// Creates a test contact database if it hasn't been created yet. +// The existence of test base is done through testing if there +// is a contact matching with word "Dummy". Test data base has +// a contact for Mr Dummy Contact. +// This is the primary function of this file. +// --------------------------------------------------------- +// +TInt CreateTestContactDatabaseL() + { + + TInt nbr_of_contacts = 15; + + /* + * Contact data contains contact data as text strings. + * Each contact takes six lines: + * - first name + * - last name + * - cell number + * - home number + * - company name + * - e-mail address + * Empty string means that field is not set. + */ + + char* contactdata[] = + { + "Dummy", + "Contact", + "+1056439939", + "035558756", + "Ericsson", + "dummy.contact@ericsson.sw", + + "Jaakko", + "Helanti", + "+358405557631", + "034447611", + "Nokia", + "jaakko.helanti@helanti.com", + + "Stan", + "Laurel", + "+0104438839992", + "+0104438839000", + "MGM", + "stan.laurel@heaven.com", + + "Oliver", + "Hardy", + "+01078398927", + "+10364537882", + "MGM", + "oliver.hardy@heaven.com", + + "Harold", + "Lloyd", + "+102843947", + "+10290503958", + "Universal", + "harold.lloyd@universal.com", + + "Tauno", + "Palo", + "+358405557631", + "014445466", + "Suomi Filmi", + "tauno.palo@gmail.com", + + "Tea", + "Ista", + "+358475554590", + "018723195", + "Helsingin Kaupungin Teatteri", + "tea.ista@cultureclub.com", + + "Ansa", + "Ikonen", + "+358471134099", + "012388192", + "Suomi Filmi", + "ansa.ikonen@gmail.com", + + "Bertil", + "Nystrom", + "+35866377334", + "074500998", + "Rovaniemen Viuluveistämö", + "bertil.nystrom@rvv.com", + + "", + "Onlylastname", + "+3585556743", + "+35835552727", + "", + "", + + "Onlyfirstname", + "", + "+358405559874", + "035553747", + "", + "", + + "", + "Two-Part Lastname", + "+358405557432", + "", + "", + "", + + "", + "", + "+35866377334", + "074500998", + "Just Companyname", + "john.doe@justcompanyname.com", + + "One", + "Number", + "", + "075553266", + "Idaho", + "", + + "No", + "Number", + "", + "", + "Ericsson", + "no.number@ericsson.com", + }; + + + CPbkContactEngine* engine = CPbkContactEngine::NewL(); + CleanupStack::PushL( engine ); + + _LIT(KDummyContact, "Dummy"); + + CContactIdArray* findings = engine->FindLC( KDummyContact ); + + // If dummy contact is found, the test database has already been created. + if (findings->Count() > 0) + { + CleanupStack::PopAndDestroy( findings ); + CleanupStack::PopAndDestroy( engine ); + return 0; + } + + CleanupStack::PopAndDestroy( findings ); + + for (TInt i = 0; i < nbr_of_contacts; i++ ) + { + AddContactL( contactdata, engine, i ); + } + + CleanupStack::PopAndDestroy(engine); + + return nbr_of_contacts; + } + + + + + + + + + + + + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/easydialing/tsrc/t_easydialingplugin/src/dummyparentcontrol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/easydialing/tsrc/t_easydialingplugin/src/dummyparentcontrol.cpp Sun Mar 14 13:09:36 2010 +0000 @@ -0,0 +1,61 @@ +/* +* 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: EUnit test file. +* +*/ + +// INCLUDE FILES +#include "dummyparentcontrol.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +CDummyParentControl* CDummyParentControl::NewL() + { + + CDummyParentControl* self = new (ELeave) CDummyParentControl(); + + self->ConstructL(); + + return self; + } + + +CDummyParentControl::CDummyParentControl() : CCoeControl() + { + + } + +CDummyParentControl::~CDummyParentControl() + { + } + +void CDummyParentControl::ConstructL() + { + CreateWindowL(); + } + diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/group/bld.inf --- a/phoneuis/group/bld.inf Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/group/bld.inf Sun Mar 14 13:09:36 2010 +0000 @@ -15,6 +15,7 @@ * */ +#include "../easydialing/group/bld.inf" #include "../dialer/group/bld.inf" #include "../BubbleManager/Group/bld.inf" #include "../ConnectUtil/group/bld.inf" diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/vmbx/help/data/xhtml.zip Binary file phoneuis/vmbx/help/data/xhtml.zip has changed diff -r abbe9afab2af -r 2411cd0e2ad6 phoneuis/vmbx/help/inc/smsvo.hlp.hrh --- a/phoneuis/vmbx/help/inc/smsvo.hlp.hrh Mon Mar 08 21:43:24 2010 +0000 +++ b/phoneuis/vmbx/help/inc/smsvo.hlp.hrh Sun Mar 14 13:09:36 2010 +0000 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* 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"