From: Igor Kuksiuk Date: Tue, 20 Jun 2017 08:43:26 +0000 (+0300) Subject: TizenRefApp-8677 [Call UI] Implement KeypadPage functionality X-Git-Tag: submit/tizen/20170703.150902^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F20%2F134920%2F13;p=profile%2Fwearable%2Fapps%2Fnative%2Fcall-ui.git TizenRefApp-8677 [Call UI] Implement KeypadPage functionality Change-Id: I81c8594f6a21f0c7a3a43fda49d93fbce212bfd6 --- diff --git a/.gitignore b/.gitignore index e2e9729..5827b40 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,11 @@ .package-stamp .rds_delta .sdk_delta.info +.cproject .sign/ .settings/ Debug/ Release/ SA_Report/ crash-info/ +.vscode/ diff --git a/edc/buttons.edc b/edc/buttons.edc index f20f2d7..298ab68 100644 --- a/edc/buttons.edc +++ b/edc/buttons.edc @@ -35,6 +35,14 @@ #define CU_BTN_MORE_OPT_TXT_SIZE 100 32 +#define CU_BTN_KEYPAD_H 59 +#define CU_BTN_KEYPAD_LEFT_H 105 +#define CU_BTN_KEYPAD_CENTER_H 86 +#define CU_BTN_KEYPAD_RIGHT_H 80 +#define CU_BTN_KEYPAD_ZERO_H 192 +#define CU_BTN_KEYPAD_SPEAKER_H 166 + + #define CU_BTN_INCOM_CALL(_name, _icon, _bg_cc, _effect_cc, _icon_norm_cc, _icon_pressed_cc) \ group { "elm/button/base/"_name; \ script { \ @@ -958,6 +966,168 @@ styles { } \ } +#define CU_BTN_KEYPAD(_button_name, _size_x, _size_y, _image) \ + group { "elm/button/base/"_button_name; \ + images.image: _image COMP; \ + images.image: "numpad_btn_bg.png" COMP; \ + parts { \ + image { "bg"; \ + scale; \ + desc { "default"; \ + image.normal: "numpad_btn_bg.png"; \ + color: 255 255 255 255; \ + min: _size_x _size_y; \ + max: _size_x _size_y; \ + } \ + desc { "press"; \ + inherit: "default"; \ + color: 255 255 255 127; \ + } \ + } \ + image { "img"; \ + scale; \ + desc { "default"; \ + rel1 { relative: 0 0; to: "bg"; } \ + rel2 { relative: 1 1; to: "bg"; } \ + image.normal: _image; \ + color: 255 255 255 255; \ + } \ + } \ + rect { "event"; \ + scale; \ + mouse; \ + desc { "default"; \ + rel1 { relative: 0 0; to: "bg"; } \ + rel2 { relative: 1 1; to: "bg"; } \ + color: 0 0 0 0; \ + } \ + desc { "disabled"; \ + inherit: "default"; \ + hid; \ + } \ + } \ + } \ + programs { \ + program { "mouse_down"; \ + signal: "mouse_down"; \ + source: _button_name; \ + action: STATE_SET "press"; \ + target: "bg"; \ + } \ + program { "mouse_up"; \ + signal: "mouse_up"; \ + source: _button_name; \ + action: STATE_SET "default"; \ + target: "bg"; \ + } \ + program { "disable"; \ + signal: "elm,state,disabled"; \ + source: "elm"; \ + action: STATE_SET "disabled"; \ + target: "event"; \ + } \ + program { "enable"; \ + signal: "elm,state,enabled"; \ + source: "elm"; \ + action: STATE_SET "default"; \ + target: "event"; \ + } \ + program { "mouse_down_elm"; \ + signal: "mouse,down,1"; \ + source: "event"; \ + action: SIGNAL_EMIT "elm,action,press" ""; \ + after: "mouse_down"; \ + } \ + program { "mouse_up_elm"; \ + signal: "mouse,up,1"; \ + source: "event"; \ + action: SIGNAL_EMIT "elm,action,unpress" ""; \ + after: "mouse_up"; \ + } \ + } \ + } + +group { "elm/button/base/callui/keypad_speaker"; + images.image: "numpad_btn_bg.png" COMP; + images.image: "w_sip_3x4_btn_ic_on.png" COMP; + + parts { + image { "bg"; + scale; + desc { "default"; + image.normal: "numpad_btn_bg.png"; + color: 255 255 255 255; + min: CU_BTN_KEYPAD_SPEAKER_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_SPEAKER_H CU_BTN_KEYPAD_H; + } + desc { "press"; + inherit: "default"; + color: 255 255 255 127; + } + } + image { "pic"; + scale; + desc { "default"; + image.normal: "w_sip_3x4_btn_ic_on.png"; + rel1 { relative: 24/CU_BTN_KEYPAD_SPEAKER_H 9/CU_BTN_KEYPAD_H; to: "bg"; } + rel2 { relative: 48/CU_BTN_KEYPAD_SPEAKER_H 41/CU_BTN_KEYPAD_H; to: "bg"; } + min: 32 32; + } + } + rect { "event"; + scale; + mouse; + desc { "default"; + rel1 { relative: 0 0; to: "bg"; } + rel2 { relative: 1 1; to: "bg"; } + color: 0 0 0 0; + } + desc { "disabled"; + inherit: "default"; + color: 0 0 0 255; + hid; + } + } + } + programs { + program { "mouse_down"; + signal: "mouse_down"; + source: "speaker_button"; + action: STATE_SET "press"; + target: "bg"; + } + program { "mouse_up"; + signal: "mouse_up"; + source: "speaker_button"; + action: STATE_SET "default"; + target: "bg"; + } + program { "disable"; + signal: "elm,state,disabled"; + source: "elm"; + action: STATE_SET "disabled"; + target: "event"; + } + program { "enable"; + signal: "elm,state,enabled"; + source: "elm"; + action: STATE_SET "default"; + target: "event"; + } + program { "mouse_down_elm"; + signal: "mouse,down,1"; + source: "event"; + action: SIGNAL_EMIT "elm,action,press" ""; + after: "mouse_down"; + } + program { "mouse_up_elm"; + signal: "mouse,up,1"; + source: "event"; + action: SIGNAL_EMIT "elm,action,unpress" ""; + after: "mouse_up"; + } + } +} CU_BTN_INCOM_CALL("callui/accept", "w_call_incoming_icon_accept.png", "AO01131", "AO01132", "AO0113", "AO0113P") CU_BTN_INCOM_CALL("callui/reject", "w_call_incoming_icon_reject.png", "AO01151", "AO01152", "AO0115", "AO0115P") @@ -977,3 +1147,39 @@ CU_BTN_MORE_OPTION("callui/headset", "w_call_option_icon_headset.png") CU_BTN_MORE_OPTION("callui/phone", "w_call_option_icon_device.png") CU_BTN_MORE_OPTION("callui/keypad", "w_call_option_icon_keypad.png") CU_BTN_MORE_OPTION("callui/gear", "w_call_option_icon_volume_towatch.png") + +CU_BTN_KEYPAD("callui/keypad_one", CU_BTN_KEYPAD_LEFT_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_01.png") + +CU_BTN_KEYPAD("callui/keypad_two", CU_BTN_KEYPAD_CENTER_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_02.png") + +CU_BTN_KEYPAD("callui/keypad_three", CU_BTN_KEYPAD_CENTER_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_03.png") + +CU_BTN_KEYPAD("callui/keypad_four", CU_BTN_KEYPAD_LEFT_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_04.png") + +CU_BTN_KEYPAD("callui/keypad_five", CU_BTN_KEYPAD_CENTER_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_05.png") + +CU_BTN_KEYPAD("callui/keypad_six", CU_BTN_KEYPAD_CENTER_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_06.png") + +CU_BTN_KEYPAD("callui/keypad_asterix", CU_BTN_KEYPAD_RIGHT_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_asterisk.png") + +CU_BTN_KEYPAD("callui/keypad_seven", CU_BTN_KEYPAD_LEFT_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_07.png") + +CU_BTN_KEYPAD("callui/keypad_eight", CU_BTN_KEYPAD_CENTER_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_08.png") + +CU_BTN_KEYPAD("callui/keypad_nine", CU_BTN_KEYPAD_CENTER_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_09.png") + +CU_BTN_KEYPAD("callui/keypad_sharp", CU_BTN_KEYPAD_RIGHT_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_sharp.png") + +CU_BTN_KEYPAD("callui/keypad_zero", CU_BTN_KEYPAD_ZERO_H, CU_BTN_KEYPAD_H, + "privacy_lock_dial_extension_00.png") diff --git a/edc/images/numpad_btn_bg.png b/edc/images/numpad_btn_bg.png new file mode 100644 index 0000000..ea67bc4 Binary files /dev/null and b/edc/images/numpad_btn_bg.png differ diff --git a/edc/images/numpad_btn_bg_bottom.png b/edc/images/numpad_btn_bg_bottom.png new file mode 100644 index 0000000..e92ef65 Binary files /dev/null and b/edc/images/numpad_btn_bg_bottom.png differ diff --git a/edc/images/privacy_lock_dial_extension_00.png b/edc/images/privacy_lock_dial_extension_00.png new file mode 100644 index 0000000..fa87593 Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_00.png differ diff --git a/edc/images/privacy_lock_dial_extension_01.png b/edc/images/privacy_lock_dial_extension_01.png new file mode 100644 index 0000000..116b098 Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_01.png differ diff --git a/edc/images/privacy_lock_dial_extension_02.png b/edc/images/privacy_lock_dial_extension_02.png new file mode 100644 index 0000000..f9a8c0f Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_02.png differ diff --git a/edc/images/privacy_lock_dial_extension_03.png b/edc/images/privacy_lock_dial_extension_03.png new file mode 100644 index 0000000..c89e702 Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_03.png differ diff --git a/edc/images/privacy_lock_dial_extension_04.png b/edc/images/privacy_lock_dial_extension_04.png new file mode 100644 index 0000000..d9c5e79 Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_04.png differ diff --git a/edc/images/privacy_lock_dial_extension_05.png b/edc/images/privacy_lock_dial_extension_05.png new file mode 100644 index 0000000..b56e648 Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_05.png differ diff --git a/edc/images/privacy_lock_dial_extension_06.png b/edc/images/privacy_lock_dial_extension_06.png new file mode 100644 index 0000000..d4ac293 Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_06.png differ diff --git a/edc/images/privacy_lock_dial_extension_07.png b/edc/images/privacy_lock_dial_extension_07.png new file mode 100644 index 0000000..fa2b05c Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_07.png differ diff --git a/edc/images/privacy_lock_dial_extension_08.png b/edc/images/privacy_lock_dial_extension_08.png new file mode 100644 index 0000000..c12f3f8 Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_08.png differ diff --git a/edc/images/privacy_lock_dial_extension_09.png b/edc/images/privacy_lock_dial_extension_09.png new file mode 100644 index 0000000..90fd0f6 Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_09.png differ diff --git a/edc/images/privacy_lock_dial_extension_asterisk.png b/edc/images/privacy_lock_dial_extension_asterisk.png new file mode 100644 index 0000000..f6dbfaf Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_asterisk.png differ diff --git a/edc/images/privacy_lock_dial_extension_sharp.png b/edc/images/privacy_lock_dial_extension_sharp.png new file mode 100644 index 0000000..c334a0d Binary files /dev/null and b/edc/images/privacy_lock_dial_extension_sharp.png differ diff --git a/edc/images/w_sip_3x4_btn_ic_on.png b/edc/images/w_sip_3x4_btn_ic_on.png new file mode 100644 index 0000000..ce44cd0 Binary files /dev/null and b/edc/images/w_sip_3x4_btn_ic_on.png differ diff --git a/edc/keypad.edc b/edc/keypad.edc index 696b988..3dc5f07 100644 --- a/edc/keypad.edc +++ b/edc/keypad.edc @@ -1,4 +1,4 @@ -/* + /* * Copyright 2017 Samsung Electronics Co., Ltd * * Licensed under the Flora License, Version 1.1 (the "License"); @@ -14,7 +14,12 @@ * limitations under the License. */ +#define CU_BTN_KEYPAD_PADDING_H 122 + group { "elm/layout/callui/keypad"; + images.image: "numpad_btn_bg.png" COMP; + images.image: "numpad_btn_bg_bottom.png" COMP; + parts { rect { "bg"; scale; @@ -22,5 +27,248 @@ group { "elm/layout/callui/keypad"; color: 0 0 0 255; } } + spacer { "label.bg.padding"; + scale; + desc { "default"; + min: 0 71; + max: -1 71; + fixed: 0 1; + align: 0.5 0.0; + } + } + spacer { "label.bg"; + scale; + desc { "default"; + rel1 { relative: 0.5 1.0; to: "label.bg.padding"; } + rel2 { relative: 0.5 1.0; to: "label.bg.padding"; } + min: 286 42; + fixed: 1 1; + align: 0.5 0.0; + } + } + swallow { "swl.entry"; + scale; + desc { "default"; + rel1 { relative: 0.0 0.0; to: "label.bg"; } + rel2 { relative: 1.0 1.0; to: "label.bg"; } + align: 1 0; + fixed: 1 1; + } + } + image { "numpad_btn_bg_bottom.bg"; + scale; + desc { "default"; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + image.normal: "numpad_btn_bg_bottom.png"; + color: 255 255 255 255; + min: CU_WIN_W CU_WIN_H; + } + } + swallow { "swl.one"; + scale; + desc { "default"; + rel1 { relative: 0.0 CU_BTN_KEYPAD_PADDING_H/CU_WIN_H; to: "bg"; } + min: CU_BTN_KEYPAD_LEFT_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_LEFT_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + spacer { "sp.col1"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to: "swl.one"; } + min: 1 CU_BTN_KEYPAD_H; + max: 1 CU_BTN_KEYPAD_H; + fixed: 1 1; + align: 0.0 0.0; + } + } + swallow { "swl.two"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to: "sp.col1"; } + min: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + spacer { "sp.col2"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to: "swl.two"; } + min: 1 CU_BTN_KEYPAD_H; + max: 1 CU_BTN_KEYPAD_H; + fixed: 1 1; + align: 0.0 0.0; + } + } + swallow { "swl.three"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to: "sp.col2"; } + min: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + spacer { "sp.col3"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to: "swl.three"; } + min: 1 CU_BTN_KEYPAD_H; + max: 1 CU_BTN_KEYPAD_H; + fixed: 1 1; + align: 0.0 0.0; + } + } + image { "dummy_button.bg"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to: "sp.col3"; } + image.normal: "numpad_btn_bg.png"; + min: CU_BTN_KEYPAD_RIGHT_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_RIGHT_H CU_BTN_KEYPAD_H; + color: 255 255 255 255; + align: 0.0 0.0; + } + } + spacer { "sp.row2"; + scale; + desc { "default"; + rel1 { relative: 0.0 1.0; to: "swl.one"; } + min: 1 1; + max: -1 1; + fixed: 1 1; + align: 0.5 0.0; + } + } + swallow { "swl.four"; + scale; + desc { "default"; + rel1 { relative: 0.0 1.0; to: "sp.row2"; } + min: CU_BTN_KEYPAD_LEFT_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_LEFT_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + swallow { "swl.five"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to_x: "swl.two"; } + rel1 { relative: 0.0 1.0; to_y: "sp.row2"; } + min: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + swallow { "swl.six"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to_x: "swl.three"; } + rel1 { relative: 0.0 1.0; to_y: "sp.row2"; } + min: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + swallow { "swl.asterix"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to_x: "dummy_button.bg"; } + rel1 { relative: 0.0 1.0; to_y: "sp.row2"; } + min: CU_BTN_KEYPAD_RIGHT_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_RIGHT_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + spacer { "sp.row3"; + scale; + desc { "default"; + rel1 { relative: 0.0 1.0; to: "swl.four"; } + min: 1 1; + max: -1 1; + fixed: 1 1; + align: 0.5 0.0; + } + } + swallow { "swl.seven"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to_x: "swl.four"; } + rel1 { relative: 0.0 1.0; to_y: "sp.row3"; } + min: CU_BTN_KEYPAD_LEFT_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_LEFT_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + swallow { "swl.eight"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to_x: "swl.five"; } + rel1 { relative: 0.0 1.0; to_y: "sp.row3"; } + min: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + swallow { "swl.nine"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to_x: "swl.six"; } + rel1 { relative: 0.0 1.0; to_y: "sp.row3"; } + min: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_CENTER_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + swallow { "swl.sharp"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to_x: "swl.asterix"; } + rel1 { relative: 0.0 1.0; to_y: "sp.row3"; } + min: CU_BTN_KEYPAD_RIGHT_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_RIGHT_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + spacer { "sp.row4"; + scale; + desc { "default"; + rel1 { relative: 0.0 1.0; to: "swl.seven"; } + min: 1 1; + max: -1 1; + fixed: 1 1; + align: 0.5 0.0; + } + } + swallow { "swl.zero"; + scale; + desc { "default"; + rel1 { relative: 0.0 1.0; to: "sp.row4"; } + min: CU_BTN_KEYPAD_ZERO_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_ZERO_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } + spacer { "sp.zero"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to: "swl.zero"; } + min: 1 CU_BTN_KEYPAD_H; + max: 1 CU_BTN_KEYPAD_H; + fixed: 1 1; + align: 0.0 0.0; + } + } + swallow { "swl.speaker"; + scale; + desc { "default"; + rel1 { relative: 1.0 0.0; to: "sp.zero"; } + min: CU_BTN_KEYPAD_SPEAKER_H CU_BTN_KEYPAD_H; + max: CU_BTN_KEYPAD_SPEAKER_H CU_BTN_KEYPAD_H; + align: 0.0 0.0; + } + } } -} \ No newline at end of file +} diff --git a/inc/presenters/KeypadPage.h b/inc/presenters/KeypadPage.h index c00eb23..e561813 100644 --- a/inc/presenters/KeypadPage.h +++ b/inc/presenters/KeypadPage.h @@ -24,6 +24,8 @@ #include "types.h" +#include "model/ISoundManager.h" + namespace callui { class KeypadPage final : public Page { @@ -33,22 +35,42 @@ namespace callui { Builder(); ~Builder(); Builder &setNaviframe(const ucl::NaviframeSRef &navi); + Builder &setSoundManager(const ISoundManagerSRef &sm); KeypadPageSRef build(const ExitRequestHandler onExitRequest) const; private: + ISoundManagerSRef m_sm; ucl::NaviframeSRef m_navi; }; private: friend class ucl::ReffedObj; KeypadPage(ucl::IRefCountObj &rc, + const ISoundManagerSRef &sm, const ucl::NaviframeSRef &navi, const ExitRequestHandler onExitRequest); virtual ~KeypadPage(); ucl::Result doPrepare(ucl::NaviItem &item); + void onBtnPressed(ucl::Widget &widget, void *eventInfo); + void onBtnUnpressed(ucl::Widget &widget, void *eventInfo); + + ucl::Result createWidget(); + ucl::Result createEntry(); + ucl::Result createButtons(); + + //sound manager-> play dtmf for digit + void startDtmf(const unsigned char digit); + //sound manager-> stop dtmf if still playing + void stopDtmf(); + private: ucl::LayoutSRef m_widget; + ucl::ElmWidgetSRef m_entry; + + //sound manager usage + ISoundManagerSRef m_sm; + bool m_smInUse; }; } diff --git a/src/presenters/KeypadPage.cpp b/src/presenters/KeypadPage.cpp index e1460b3..c88d26f 100644 --- a/src/presenters/KeypadPage.cpp +++ b/src/presenters/KeypadPage.cpp @@ -25,10 +25,61 @@ namespace callui { namespace { namespace impl { constexpr LayoutTheme LAYOUT_KEYPAD_WIDGET {"layout", "callui", "keypad"}; + constexpr EdjePart PART_SWL_ENTRY {"swl.entry"}; + + constexpr SmartEvent BTN_PRESSED {"pressed"}; + constexpr SmartEvent BTN_UNPRESSED {"unpressed"}; + + constexpr EoDataKey BTN_DATA_KEY {"btnData"}; + + enum { + KEYPAD_BTN_MAX_COUNT = 13 + }; + + enum class OperationType { + DTMF, + VOLUME + }; + + struct ButtonInfo { + OperationType type; + const char *str; + ElmStyle style; + EdjePart swlPart; + }; + + static ButtonInfo buttonsInfo[KEYPAD_BTN_MAX_COUNT] = + { + { OperationType::DTMF, "1", + ElmStyle {"callui/keypad_one"}, EdjePart {"swl.one"} }, + { OperationType::DTMF, "2", + ElmStyle {"callui/keypad_two"}, EdjePart {"swl.two"} }, + { OperationType::DTMF, "3", + ElmStyle {"callui/keypad_three"}, EdjePart {"swl.three"} }, + { OperationType::DTMF, "4", + ElmStyle {"callui/keypad_four"}, EdjePart {"swl.four"} }, + { OperationType::DTMF, "5", + ElmStyle {"callui/keypad_five"}, EdjePart {"swl.five"} }, + { OperationType::DTMF, "6", + ElmStyle {"callui/keypad_six"}, EdjePart {"swl.six"} }, + { OperationType::DTMF, "7", + ElmStyle {"callui/keypad_seven"}, EdjePart {"swl.seven"} }, + { OperationType::DTMF, "8", + ElmStyle {"callui/keypad_eight"}, EdjePart {"swl.eight"} }, + { OperationType::DTMF, "9", + ElmStyle {"callui/keypad_nine"}, EdjePart {"swl.nine"} }, + { OperationType::DTMF, "0", + ElmStyle {"callui/keypad_zero"}, EdjePart {"swl.zero"} }, + { OperationType::DTMF, "#", + ElmStyle {"callui/keypad_sharp"}, EdjePart {"swl.sharp"} }, + { OperationType::DTMF, "*", + ElmStyle {"callui/keypad_asterix"}, EdjePart {"swl.asterix"} }, + { OperationType::VOLUME, "", + ElmStyle {"callui/keypad_speaker"}, EdjePart {"swl.speaker"} } + }; }}} namespace callui { - using namespace ucl; // KeypadPage::Builder @@ -48,6 +99,12 @@ namespace callui { return *this; } + KeypadPage::Builder &KeypadPage::Builder::setSoundManager(const ISoundManagerSRef &sm) + { + m_sm = sm; + return *this; + } + KeypadPageSRef KeypadPage::Builder::build( const ExitRequestHandler onExitRequest) const { @@ -60,7 +117,7 @@ namespace callui { "m_navi is NULL"); } - auto result = makeShared(m_navi, onExitRequest); + auto result = makeShared(m_sm, m_navi, onExitRequest); FAIL_RETURN_VALUE(result->prepare([&result](NaviItem &item) { @@ -74,31 +131,141 @@ namespace callui { // KeypadPage KeypadPage::KeypadPage(IRefCountObj &rc, + const ISoundManagerSRef &sm, const NaviframeSRef &navi, const ExitRequestHandler onExitRequest): - Page(rc, navi, onExitRequest) + Page(rc, navi, onExitRequest), + m_sm(sm), + m_smInUse(false) { } KeypadPage::~KeypadPage() { + stopDtmf(); + } + + void KeypadPage::onBtnPressed(Widget &widget, void *eventInfo) + { + impl::ButtonInfo *btn = static_cast(widget.getData(impl::BTN_DATA_KEY)); + ILOG("button pressed: %c", btn->str); + + if (btn->type == impl::OperationType::DTMF) { + elm_entry_entry_append(*m_entry, btn->str); + elm_entry_cursor_end_set(*m_entry); + startDtmf(*(btn->str)); + } + + if (btn->type == impl::OperationType::VOLUME) { + //volume control + } + } + + void KeypadPage::onBtnUnpressed(Widget &widget, void *eventInfo) + { + impl::ButtonInfo *btn = static_cast(widget.getData(impl::BTN_DATA_KEY)); + ILOG("button unpressed: %c", btn->str); + stopDtmf(); } Result KeypadPage::doPrepare(NaviItem &item) + { + FAIL_RETURN(createWidget(), "createWidget() failed!"); + + FAIL_RETURN(createEntry(), "createEntry() failed!"); + + FAIL_RETURN(createButtons(), "createButtons() failed!"); + + item = getNaviframe().push(*m_widget); + if (!item) { + LOG_RETURN(RES_FAIL, "Naviframe::push() failed!"); + } + + return RES_OK; + } + + Result KeypadPage::createWidget() { m_widget = Layout::Builder(). setTheme(impl::LAYOUT_KEYPAD_WIDGET). setIsOwner(true). build(getNaviframe()); + if (!m_widget) { LOG_RETURN(RES_FAIL, "Layout::build() failed!"); } - item = getNaviframe().push(*m_widget); - if (!item) { - LOG_RETURN(RES_FAIL, "Naviframe::push() failed!"); + return RES_OK; + } + + ucl::Result KeypadPage::createEntry() + { + Evas_Object *entry = elm_entry_add(*m_widget); + if(!entry) { + LOG_RETURN(RES_FAIL, "elm_entry_add() failed!"); + } + m_entry = makeShared(entry, true); + + static Elm_Entry_Filter_Accept_Set digitsFilterData; + + digitsFilterData.accepted = "0123456789*#"; + digitsFilterData.rejected = nullptr; + + elm_entry_single_line_set(entry, EINA_TRUE); + elm_entry_editable_set(entry, EINA_FALSE); + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_markup_filter_append(entry, + elm_entry_filter_accept_set, &digitsFilterData); + + m_widget->setContent(entry, impl::PART_SWL_ENTRY); + show(*m_entry); + + return RES_OK; + } + + ucl::Result KeypadPage::createButtons() + { + Evas_Object *button; + StyledWidgetSRef buttonSRef; + + for (int i = 0; i < impl::KEYPAD_BTN_MAX_COUNT; ++i) { + button = elm_button_add(*m_widget); + + if(!button) { + LOG_RETURN(RES_FAIL, "elm_button_add() failed!"); + } + + buttonSRef = makeShared(button); + buttonSRef->setData(impl::BTN_DATA_KEY, &(impl::buttonsInfo[i])); + buttonSRef->setStyle(impl::buttonsInfo[i].style); + + buttonSRef->addEventHandler(impl::BTN_PRESSED, + WEAK_DELEGATE(KeypadPage::onBtnPressed, + asWeak(*this))); + + buttonSRef->addEventHandler(impl::BTN_UNPRESSED, + WEAK_DELEGATE(KeypadPage::onBtnUnpressed, + asWeak(*this))); + + m_widget->setContent(button, impl::buttonsInfo[i].swlPart); + show(*buttonSRef); } + return RES_OK; } + void KeypadPage::startDtmf(const unsigned char digit) + { + stopDtmf(); + m_smInUse = true; + m_sm->startDtmf(digit); + } + + void KeypadPage::stopDtmf() + { + if(m_smInUse) { + m_sm->stopDtmf(); + m_smInUse = false; + } + } } diff --git a/src/presenters/MoreOptionsPresenter.cpp b/src/presenters/MoreOptionsPresenter.cpp index 91b3ee6..60ce201 100644 --- a/src/presenters/MoreOptionsPresenter.cpp +++ b/src/presenters/MoreOptionsPresenter.cpp @@ -285,7 +285,6 @@ namespace callui { { if (!m_panelLy->getContent(impl::PART_SWL_PANEL_LY_BOTTOM)) { setPanelContent(m_btnKeypad, impl::PART_SWL_PANEL_LY_BOTTOM); - disable(*m_btnKeypad); } } @@ -386,9 +385,10 @@ namespace callui { } else { LOG_RETURN_VOID(RES_FAIL, "Naviframe is NULL"); } - m_keypad = builder.build( - WEAK_DELEGATE(MoreOptionsPresenter::onPageExitRequest, - asWeak(this))); + m_keypad = builder.setSoundManager(m_sm) + .build(WEAK_DELEGATE( + MoreOptionsPresenter::onPageExitRequest, + asWeak(*this))); } void MoreOptionsPresenter::onPageExitRequest(Page &page)