From 0851e2661be70d781565623a202658bcf097da78 Mon Sep 17 00:00:00 2001 From: Igor Kuksiuk Date: Tue, 20 Jun 2017 11:43:26 +0300 Subject: [PATCH] TizenRefApp-8677 [Call UI] Implement KeypadPage functionality Change-Id: I81c8594f6a21f0c7a3a43fda49d93fbce212bfd6 --- .gitignore | 2 + edc/buttons.edc | 206 ++++++++++++++ edc/images/numpad_btn_bg.png | Bin 0 -> 933 bytes edc/images/numpad_btn_bg_bottom.png | Bin 0 -> 5112 bytes edc/images/privacy_lock_dial_extension_00.png | Bin 0 -> 1392 bytes edc/images/privacy_lock_dial_extension_01.png | Bin 0 -> 1098 bytes edc/images/privacy_lock_dial_extension_02.png | Bin 0 -> 1619 bytes edc/images/privacy_lock_dial_extension_03.png | Bin 0 -> 1422 bytes edc/images/privacy_lock_dial_extension_04.png | Bin 0 -> 1373 bytes edc/images/privacy_lock_dial_extension_05.png | Bin 0 -> 1418 bytes edc/images/privacy_lock_dial_extension_06.png | Bin 0 -> 1649 bytes edc/images/privacy_lock_dial_extension_07.png | Bin 0 -> 1656 bytes edc/images/privacy_lock_dial_extension_08.png | Bin 0 -> 1585 bytes edc/images/privacy_lock_dial_extension_09.png | Bin 0 -> 1793 bytes .../privacy_lock_dial_extension_asterisk.png | Bin 0 -> 1250 bytes .../privacy_lock_dial_extension_sharp.png | Bin 0 -> 1288 bytes edc/images/w_sip_3x4_btn_ic_on.png | Bin 0 -> 1424 bytes edc/keypad.edc | 252 +++++++++++++++++- inc/presenters/KeypadPage.h | 22 ++ src/presenters/KeypadPage.cpp | 179 ++++++++++++- src/presenters/MoreOptionsPresenter.cpp | 8 +- 21 files changed, 657 insertions(+), 12 deletions(-) create mode 100644 edc/images/numpad_btn_bg.png create mode 100644 edc/images/numpad_btn_bg_bottom.png create mode 100644 edc/images/privacy_lock_dial_extension_00.png create mode 100644 edc/images/privacy_lock_dial_extension_01.png create mode 100644 edc/images/privacy_lock_dial_extension_02.png create mode 100644 edc/images/privacy_lock_dial_extension_03.png create mode 100644 edc/images/privacy_lock_dial_extension_04.png create mode 100644 edc/images/privacy_lock_dial_extension_05.png create mode 100644 edc/images/privacy_lock_dial_extension_06.png create mode 100644 edc/images/privacy_lock_dial_extension_07.png create mode 100644 edc/images/privacy_lock_dial_extension_08.png create mode 100644 edc/images/privacy_lock_dial_extension_09.png create mode 100644 edc/images/privacy_lock_dial_extension_asterisk.png create mode 100644 edc/images/privacy_lock_dial_extension_sharp.png create mode 100644 edc/images/w_sip_3x4_btn_ic_on.png 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 0000000000000000000000000000000000000000..ea67bc417a37961c5ffa67b83a15fea9e14e1733 GIT binary patch literal 933 zcmaJ=O^?z*7_JZ#vRMwEj9#2{JxZsaux;or(1J^(gg_HHZfOT-*mk<@AcfP$oBza< ziC#T;_AmG+yzj{=Q1k#cna<3c_j%su{g_XK{@e1|%QJ>y%H11tNcX4NDi!FzQ2zRj zZZAlCOh$N0R!)qVriUj8bOUFGhRE^O_dijcVT!MPdrZbwPjhj=IhhZa1`$OwO#M2I z9Cv{Tn4p;->g@0DKUm;ZwKv0z@2;26thi zr8>Li)#y1hLl$gZ$UTpbe9KnP|aa>O@fB_$;N|(X#&U8UzRLgbdMNy+?@? zdmSM-LpzQs;$eWEOm^gAheZMO;S6GBq=RL7BAaUjy18n3{XgNtVgkOOTMHq zL+Y63QEWC0K|~{)DE2=fuM^_{Y?Idf(^|yST6S3Ph?adG(n&0&Vqn(Ve_EZJ==@~I z!{E}(Vf0Z*=RKx_{p_(tix*KFG9ugQ6-blWKO&OblcSB-}!%sYm8EDl~ZvWL@c L_suV@+mC+$g;f~U literal 0 HcmV?d00001 diff --git a/edc/images/numpad_btn_bg_bottom.png b/edc/images/numpad_btn_bg_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..e92ef6558d6a32cd8815c20a12f4be887009636c GIT binary patch literal 5112 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 F{{Uwy+K>PM literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..116b098aa088d3b20361184c7c55823efc6d557d GIT binary patch literal 1098 zcmaJ=Uq};i9KT3H1rZ`5i{i&Anb_`bo7>#AsdG2oz=_Slh9-F4{dC8?`(1ZG+bKPW z5>ZBo`WQX+5`^i4Xc|ZmM)af)5lKY#5K-Vm5A_oCySZsZ>)`J9`~L3p`F#KWZuN9` zR#l#^q$sK?78Md?Rmgj({22LK&mU}&r3OdRxEBrMoM=EQB%>h+VyZX-6Ht`LufBu< ziaL5;Nv3f+-o;BuWkegpSgKCg6cuQ-bWzGe42Ix{q6O)_jZGRTa*$4W;#^!0!;BK0 zFktUQcT$?jN`9GcZ2oaJl&=j&E{-!b1~phCIwCgpPtQVg>08#yZck zxm=FPxfx`Puui|<&vGu-<#G^&!yMPJXgM^qwx}RLQ!*4CD@X&jqBw-caF8aE?x&#Y z2eO)3C=)3dYl%ARWH>veA}}8RKU7r@&?Zj6!+8HGY$nHb$R?nP#texxZn)NVrSo9} ziWnJ5ghq>1?8zXE%nZ^&IGnES&T(O{ zOK=NruhSXvwtGXIU+9RqBOU%`uistd3P>7Lp@xfG`H&ka$+gEp)rn^T8p<^&cNjOt+ngT<+Xy>svb6zjULkak(tJRNr6ID$lKKT>o&zT00wPmgjf+&Ma(f zH%`_?XUk%kPZES@>IY@t65-v3K$a)x%UjdHSh* P#=hOLNVl-qJ~;Io71ddrT8|96u2sl+^j0IB0T|h%#ue*V2~WTA}nP6fF`cwbP(pdso_Ed$o79Ey`4e zA}CH1(1>i#fie_96r78SqUca3(b&IYm(43X4NzH#nj2n|A9Q0VwQPyf`Lva&9obH5`YpXjRdH%VOc~Pf#Ke@ zR|z=)OboZ`475SJ1Tm2|KIX&lJvIl!1^{`i$AOu$2^usKSysD(`}E9tE@;IS++|{| zK^dJfR4Q79i0=aOC4M-ki7@ zNki2mzL=AOYoTce0zq!Ko9`C!NoN)W%VaW0AcTZM9)sXfUOSC>cy=mmQ~@O@lhf*; zt)w0FDPl&_MJu>Wq#shSImTq|)JU0_fhzF z(s>;Oltxgb%V}a7XAbkZav&-vfzhN>N0MtstC(sbX_Bp5~Ut{S*-nbnSyZYpA! zqtzlBJ4Iu56QMyBTtc2JNbU+3H`tzKC=AyQz(j zR_>~Qt=ZK4{EAFHjrI0jMk3qTd3|6{?u7M8&B$q1=GH5gT>-{}Na8Lw}v&uN?Nf!zOTOiE#C^!xe>C(Uz2&`V860j4A^wzV-6;t|JpqX4Jvm zds7RGujntMH4PcRX*O+-qCBiSb4}Jg^Ak zw%zCt4Q9P!4+iI>UC^(OFBX4dJhn)}efcDG5BX|MNMKCwsvf!bnm)y%>Mot};8H$) z`pCeF7f+k=O0;hZxcV9OU$-`t32)|SFRh^`6}2_)c^p)}yQhm?GApAAFWpcbDVWn# z)hEjxD)^f(|CvM9em^~Zf3Q1pR{zCpSJZY<=!E_-&1R#2$byE>yNBvh2Fq&GbM_Xn zs}jX<&!Lcpz(aAe%1zQ~wUe8ZTQ_d(<%uNjuCRT!DcA1mbVJc^Hq2?e*OTwX0&fSE z_rHHd4 c=y~V`z%S(f+V}78wELcUO+pG<8^1d59~}E;`v3p{ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c89e7028b908734dc791e16ae36fe4439e35b7cc GIT binary patch literal 1422 zcmeAS@N?(olHy`uVBq!ia0vp^VL)un!3HEB+SC>UDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49seoArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XQrEMU}mmhZmDNz zYHn^~uA^XNU}&muV61O!plf7oWny4uVx#~CNh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*s+860W~8sV9F zDf#8anqWP?zE+-j#U+V($*G<$wn{)#^fEJ3tlZ4aObkqo9F1L!%?u4)%`DuU3>^)D zz`(`C+{x4hrq?AuximL5uLPzy1)!Q zV@SoVH?w+kn+*h7J*TopG>X39C}FW;l4W#LP(HwMmg6NyN{azg&x0A?0`$b#W?39j zd+(`!q<_Mvrxy2^&73&+jnTOa)Vp}%wdti3 zL{F_st-T;5yE|>gy0V;9>kx74Zx5J4t{*51P!?aXi{+Z;iggWt)mF@9id3JqS@X@c zw_Kcy{M;kw7qD*ET=sOHmD#c-q6RzOGi2X8UG{5IXwtEJ>%+p1T@x;OlYHpV`+Uda zv);zo$uWF8IDzq6gY4&=Ezx?-y*HlzXWsC6O^BVLu{D46hOe>*{InPDxD_zR_ok}+ z#b2GQEoY7eZrHjdx$;$)d*9idH(|GHbN)|I4c~Ts$|kSda}La6YT9}zItu6`4xrZ( z)Qk4MyS=)pl_9j({NLR$yT^ZOTeJB%)|UU>V!w3DR3C}Dx%sw!bK<`qIKATYM($9J ze^+?kcpq`yxM}^uw-05X$M4CRxl#4?6%pfWHh1d6*ch_?OlLPL9+|6H_V+Po~;1FfglShD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo|$g4ftk62xuu?= zskym{xsHO7fuX6sfw8`^fv%CUm5G6siID;nC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3YHG80i}s=>k>g7FXt#Bv$C=6)VF`a7isrF3Kz@$;{7F0GXJW zlwVq6s|0i@#0$9vaAWg|p}_OryT3Rx8)j_d)>mCs=cY{dak-lN^o-}Xj*uqnP7M{wo;!9rb1M8d9d}GBPY4v4 zv}@vTtwu&qw!=;-JG-yxdA7F(S#f&0DQ|zN7qwYsuifZeToTfbg$qp&~M#c$}vOxXQV{?)QwrQ4&P>?qQHB>p-+Y4-=d zPfd52R{r~H8ZK0M$Jax#N$=o?^N-C{d`~;tKH}hG>uh>odpBI==G^|aU8`S)+Dv*> z63Wtk-DB6vpC^~^wo9HJY^3s6wtr&b{5O*(zW&Vkak9rPoroY^bF)OhP2KgLz7tcX z$E?*$@z~TU{6)=u|Gu(mpMS@MNl%lJDVcTKTYc$X_xquz{;XoImZ`Xd6y~vZtP%`T W+A01a`%9`o1)is?pUXO@geCw*tL!`g literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b56e648074de5430ac3e402eb96a0c6750a07797 GIT binary patch literal 1418 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c12f3f8fc688b79b58213412f2b498f84b90e28a GIT binary patch literal 1585 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 Bt&#u$ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f6dbfaf4685308bfc9fab75ffd5978c9cf522b25 GIT binary patch literal 1250 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 literal 0 HcmV?d00001 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) -- 2.34.1