From 4c4078c8575b0b281fd65d413b3ac70f0d615652 Mon Sep 17 00:00:00 2001 From: Igor Olshevskyi Date: Tue, 4 Jul 2017 09:12:10 +0300 Subject: [PATCH] TizenRefApp-8793 [Call UI] Implement visual cue for the bezel interaction on Incoming Call Change-Id: Iaa55224d257713721236aff1ca68add60f564af9 --- edc/accept_reject.edc | 183 ++++++++++++++++++ .../Incoming/w_alert_interaction_cue_l_01.png | Bin 0 -> 1197 bytes .../Incoming/w_alert_interaction_cue_l_02.png | Bin 0 -> 1189 bytes .../Incoming/w_alert_interaction_cue_l_03.png | Bin 0 -> 1292 bytes .../Incoming/w_alert_interaction_cue_l_04.png | Bin 0 -> 1282 bytes .../Incoming/w_alert_interaction_cue_r_01.png | Bin 0 -> 1165 bytes .../Incoming/w_alert_interaction_cue_r_02.png | Bin 0 -> 1175 bytes .../Incoming/w_alert_interaction_cue_r_03.png | Bin 0 -> 1301 bytes .../Incoming/w_alert_interaction_cue_r_04.png | Bin 0 -> 1280 bytes inc/presenters/AcceptRejectPresenter.h | 3 + inc/presenters/MotionSensorPresenter.h | 54 ++++++ inc/presenters/types.h | 2 + src/presenters/AcceptRejectPresenter.cpp | 26 +++ src/presenters/MotionSensorPresenter.cpp | 100 ++++++++++ 14 files changed, 368 insertions(+) create mode 100644 edc/images/Incoming/w_alert_interaction_cue_l_01.png create mode 100644 edc/images/Incoming/w_alert_interaction_cue_l_02.png create mode 100644 edc/images/Incoming/w_alert_interaction_cue_l_03.png create mode 100644 edc/images/Incoming/w_alert_interaction_cue_l_04.png create mode 100644 edc/images/Incoming/w_alert_interaction_cue_r_01.png create mode 100644 edc/images/Incoming/w_alert_interaction_cue_r_02.png create mode 100644 edc/images/Incoming/w_alert_interaction_cue_r_03.png create mode 100644 edc/images/Incoming/w_alert_interaction_cue_r_04.png create mode 100644 inc/presenters/MotionSensorPresenter.h create mode 100644 src/presenters/MotionSensorPresenter.cpp diff --git a/edc/accept_reject.edc b/edc/accept_reject.edc index b590692..179e042 100644 --- a/edc/accept_reject.edc +++ b/edc/accept_reject.edc @@ -20,8 +20,120 @@ #define CU_BTN_HIDE_ANIM_TIME 0.2 +#define CU_ARROW_WH 24 + +#define CU_ARROW1_LR 68 +#define CU_ARROW1_T 57 +#define CU_ARROW1_TIME 0.23 + +#define CU_ARROW2_LR 49 +#define CU_ARROW2_T 75 +#define CU_ARROW2_TIME 0.26 + +#define CU_ARROW3_LR 35 +#define CU_ARROW3_T 96 +#define CU_ARROW3_TIME 0.30 + +#define CU_ARROW4_LR 25 +#define CU_ARROW4_T 119 +#define CU_ARROW4_TIME 0.16 + +#define CU_INCOMING_CALL_IMG_DIR "Incoming/" + +#define CU_BEZELCUE_ANIMATE_COUNT_MAX 3 +#define CU_BEZELCUE_HIDE_DURATION 0.5 + +#define CU_PATH_ICON_ARROW1_L CU_INCOMING_CALL_IMG_DIR"w_alert_interaction_cue_l_01.png" +#define CU_PATH_ICON_ARROW2_L CU_INCOMING_CALL_IMG_DIR"w_alert_interaction_cue_l_02.png" +#define CU_PATH_ICON_ARROW3_L CU_INCOMING_CALL_IMG_DIR"w_alert_interaction_cue_l_03.png" +#define CU_PATH_ICON_ARROW4_L CU_INCOMING_CALL_IMG_DIR"w_alert_interaction_cue_l_04.png" + +#define CU_PATH_ICON_ARROW1_R CU_INCOMING_CALL_IMG_DIR"w_alert_interaction_cue_r_01.png" +#define CU_PATH_ICON_ARROW2_R CU_INCOMING_CALL_IMG_DIR"w_alert_interaction_cue_r_02.png" +#define CU_PATH_ICON_ARROW3_R CU_INCOMING_CALL_IMG_DIR"w_alert_interaction_cue_r_03.png" +#define CU_PATH_ICON_ARROW4_R CU_INCOMING_CALL_IMG_DIR"w_alert_interaction_cue_r_04.png" + +#define CU_ARROW_PARTS(NAME, SIDE, ICON_PATH, POS_X, POS_Y, ALIGN_X) \ + spacer { "spacer."NAME"."SIDE"_top"; \ + scale; \ + desc { "default"; \ + fixed: 1 1; \ + min: POS_X POS_Y; \ + align: ALIGN_X 0.0; \ + rel1 { relative: ALIGN_X 0.0; to_x: "spacer."SIDE; } \ + rel2 { relative: ALIGN_X 0.0; to_x: "spacer."SIDE; } \ + } \ + } \ + image { "image."NAME"_"SIDE; \ + scale; \ + images.image: ICON_PATH COMP; \ + clip: "rect.arrows_"SIDE".clipper"; \ + desc { "default"; \ + fixed: 1 1; \ + min: CU_ARROW_WH CU_ARROW_WH; \ + align: ALIGN_X 0.0; \ + rel1 { relative: (1.0-ALIGN_X) 1.0; to: "spacer."NAME"."SIDE"_top"; } \ + rel2 { relative: (1.0-ALIGN_X) 1.0; to: "spacer."NAME"."SIDE"_top"; } \ + image.normal: ICON_PATH; \ + color: 255 255 255 64; \ + } \ + desc { "active"; \ + inherit: "default"; \ + color: 255 255 255 255; \ + } \ + } + +//"image.arrow1_left" "image.arrow2_left" "image.arrow3_left" "image.arrow4_left" "image.arrow1_right" "image.arrow2_right" "image.arrow3_right" "image.arrow4_right" + + +#define CU_ARROW_PROGRAMS(ARROW_NAME, NEXT_ARROW_NAME, DURATION_IN, DURATION_OUT) \ + program { \ + name: "activate_"ARROW_NAME; \ + action: STATE_SET "active"; \ + targets: "image."ARROW_NAME"_left" "image."ARROW_NAME"_right"; \ + transition: LINEAR DURATION_IN; \ + after: "deactivate_"ARROW_NAME; \ + after: "activate_"NEXT_ARROW_NAME; \ + } \ + program { \ + name: "deactivate_"ARROW_NAME; \ + action: STATE_SET "default"; \ + targets: "image."ARROW_NAME"_left" "image."ARROW_NAME"_right"; \ + transition: LINEAR DURATION_OUT; \ + } + group { "elm/layout/callui/accept_reject"; parts { + CU_ARROW_PARTS("arrow1", "left", CU_PATH_ICON_ARROW1_L, CU_ARROW1_LR, CU_ARROW1_T, 0.0) + CU_ARROW_PARTS("arrow2", "left", CU_PATH_ICON_ARROW2_L, CU_ARROW2_LR, CU_ARROW2_T, 0.0) + CU_ARROW_PARTS("arrow3", "left", CU_PATH_ICON_ARROW3_L, CU_ARROW3_LR, CU_ARROW3_T, 0.0) + CU_ARROW_PARTS("arrow4", "left", CU_PATH_ICON_ARROW4_L, CU_ARROW4_LR, CU_ARROW4_T, 0.0) + CU_ARROW_PARTS("arrow1", "right", CU_PATH_ICON_ARROW1_R, CU_ARROW1_LR, CU_ARROW1_T, 1.0) + CU_ARROW_PARTS("arrow2", "right", CU_PATH_ICON_ARROW2_R, CU_ARROW2_LR, CU_ARROW2_T, 1.0) + CU_ARROW_PARTS("arrow3", "right", CU_PATH_ICON_ARROW3_R, CU_ARROW3_LR, CU_ARROW3_T, 1.0) + CU_ARROW_PARTS("arrow4", "right", CU_PATH_ICON_ARROW4_R, CU_ARROW4_LR, CU_ARROW4_T, 1.0) + rect { "rect.arrows_left.clipper"; + desc { "default"; + rel1 { to_x: "image.arrow4_left"; to_y: "image.arrow1_left"; } + rel2 { to_x: "image.arrow1_left"; to_y: "image.arrow4_left"; } + color_class: "TRANSPARENT"; + } + desc { "visible"; + inherit: "default"; + color_class: "AO0113"; + } + } + rect { "rect.arrows_right.clipper"; + desc { "default"; + rel1.to: "image.arrow1_right"; + rel2.to: "image.arrow4_right"; + color_class: "TRANSPARENT"; + } + desc { "visible"; + inherit: "default"; + color_class: "AO0115"; + } + } spacer { "spacer.left"; scale; desc { "default"; @@ -86,16 +198,59 @@ group { "elm/layout/callui/accept_reject"; } } programs { + script { + public arrow_anim_counter; + public is_arrow_anim; + } + program { + signal: "arrows,show"; + source: "*"; + after: "start_arrow_anim"; + } + program { "start_arrow_anim"; + script { + if (get_int(is_arrow_anim) == 0) { + set_int(is_arrow_anim, 1); + set_int(arrow_anim_counter, get_int(arrow_anim_counter) + 1); + run_program(PROGRAM:"show_arrows"); + run_program(PROGRAM:"activate_arrow4"); + } + } + } + program { "activate_check"; + script { + if (get_int(is_arrow_anim) == 1) { + if (get_int(arrow_anim_counter) < CU_BEZELCUE_ANIMATE_COUNT_MAX) { + set_int(is_arrow_anim, 1); + set_int(arrow_anim_counter, get_int(arrow_anim_counter) + 1); + run_program(PROGRAM:"activate_arrow4"); + } else { + set_int(is_arrow_anim, 0); + set_int(arrow_anim_counter, 0); + run_program(PROGRAM:"hide_arrows_anim"); + } + } + } + } + CU_ARROW_PROGRAMS("arrow4", "arrow3", CU_ARROW4_TIME, CU_ARROW3_TIME) + CU_ARROW_PROGRAMS("arrow3", "arrow2", CU_ARROW3_TIME, CU_ARROW2_TIME) + CU_ARROW_PROGRAMS("arrow2", "arrow1", CU_ARROW2_TIME, CU_ARROW1_TIME) + CU_ARROW_PROGRAMS("arrow1", "check", CU_ARROW1_TIME, CU_ARROW4_TIME) program { signal: "accept,show"; source: "*"; action: STATE_SET "default"; target: "spacer.left"; transition: TRANSITION_GLIDE(CU_BTN_HIDE_ANIM_TIME); + after: "try_show_arrows"; } program { signal: "accept,hide"; source: "*"; + after: "hide_arrows"; + after: "accept,hide,anim"; + } + program { "accept,hide,anim"; action: STATE_SET "hidden"; target: "spacer.left"; transition: TRANSITION_GLIDE(CU_BTN_HIDE_ANIM_TIME); @@ -106,10 +261,15 @@ group { "elm/layout/callui/accept_reject"; action: STATE_SET "default"; target: "spacer.right"; transition: TRANSITION_GLIDE(CU_BTN_HIDE_ANIM_TIME); + after: "try_show_arrows"; } program { signal: "reject,hide"; source: "*"; + after: "hide_arrows"; + after: "reject,hide,anim"; + } + program { "reject,hide,anim"; action: STATE_SET "hidden"; target: "spacer.right"; transition: TRANSITION_GLIDE(CU_BTN_HIDE_ANIM_TIME); @@ -119,6 +279,29 @@ group { "elm/layout/callui/accept_reject"; source: "*"; action: STATE_SET "default"; targets: "spacer.right" "spacer.left"; + after: "try_show_arrows"; + } + program { "try_show_arrows"; + script { + if (get_int(is_arrow_anim) == 1) { + run_program(PROGRAM:"show_arrows"); + } else { + run_program(PROGRAM:"hide_arrows"); + } + } + } + program { "show_arrows"; + action: STATE_SET "visible"; + targets: "rect.arrows_left.clipper" "rect.arrows_right.clipper"; + } + program { "hide_arrows"; + action: STATE_SET "default"; + targets: "rect.arrows_left.clipper" "rect.arrows_right.clipper"; + } + program { "hide_arrows_anim"; + action: STATE_SET "default"; + targets: "rect.arrows_left.clipper" "rect.arrows_right.clipper"; + transition: LINEAR CU_BEZELCUE_HIDE_DURATION; } } } \ No newline at end of file diff --git a/edc/images/Incoming/w_alert_interaction_cue_l_01.png b/edc/images/Incoming/w_alert_interaction_cue_l_01.png new file mode 100644 index 0000000000000000000000000000000000000000..87cfaaa5326ca8227ad0da3e6d56b86d9632e6b0 GIT binary patch literal 1197 zcmaJ>O>Epm6n2S7Lr_ShRuNE@j=V)G5?*_}{#z?1-CgfCi@IsFSlZ4_Z9=L8l8We?5Z zDn`!2%bR$NVfvQbTAkD@XLUR9(kQV>cf63I8D?y}6C!&K6JX&P*EiVTZ+yW5*D=`h zaz&_w1>AHe79%{pI9an7=j^P*jz0&+IyxorFhQW>wftD`80;>uPRGeI&w^bOGH0-R zqUx0?PzWLn5a1>J|G-Xf==SItt_7o8bw zlaNs7`F6XVZfDX#G{eJeHk)vWB1bK_c)=&A!})Ql$6(^vj@*#Afe#W!WCioYV5!o* zBY0t@vQO;C-9XWh@f{TMFfH(&mz-8zl;N|hT)OQyvJ`k%HB8*57 z)qYdjUJ8DDc2;jCJ<_|5?GzdOJfgPEHP*pjkS_*A6 z6(Q_EtlBJ3j`o>-1 z%zEkrqi^HA?WN_Ro0ot2wtnyK#qGoIym)i-tr}S4*VfTRX7uOByc4hYf4@Flvc%6H z<=)M09UIwU-U1%It6rLKek~ZDdR;w+-?c}A^%+B1|`6t^nJG0v^WYf4=+ocNT?#$inke#2- z+;lfVYd0@aut-6{Dq?-;t5B#=@F6V}B}gBNFR>zoKz$WK#X=$8Np@o&LWi0Ad%o{{ z_uO;l^3>$Xp}|9g48shSPFWS&znXk6JWt!TcJ5!=y+#T(G95HX8%3BIcY-6C!&K6Hv#quAgK7_wfxxV;SfEh#>$eAo>3lIWD$v{a~6gUDz0gAjpUxkB`AuEQcg5JYYZ;{h5Dps-Qi_UUv zlaSEh`F6XVX=gJ*G|NL>*Aos=&;Ddw_)q{DGW2w@u zBY0uCyiM%Ky+F~B@f{TMFeC7umz-Ne7C zsn4?$zMw!^vDBh8E~^k06g_W>d1%Q6wP-4qxQ#9OF+skK`@UW3yN4}26Kj|eMkI); zLD1@F!BjIKLEH>NU`{LG=vmiyf_8i?xuUHTTR3trV5b-b9@vbr;qKsH7p(DoR!}WT z(x?`wsfBD&l1(!&S(+w^Y!B-^6}PSYq$^Z^*q32wG-je8h+G3ZG6$ima!9Q!w9!x5t!}^nrjj;i4 z*ZzSkyY6!{NAg1l(|eek;L~Em-v8^qd%p?yKd!CMq|!gJt~31L!H<_#4}G0F(5+ow zn!0-A!0yvW_g*;W#5W(Wy_B9~{@e{NrfyvQW%b?{-PPAuCeDM4`+o1PUmCo5hEIF*iQ{@Yb!hRC@V3PIvFvt!r1#ymCi8{5E&ulcs*| z9bmRTI5DE7xG!fO{cOJb_ub}K6YuR|p4-cOQ*VFv`0&BxC&ZKrlh(KSnWg^#xUGYU literal 0 HcmV?d00001 diff --git a/edc/images/Incoming/w_alert_interaction_cue_l_03.png b/edc/images/Incoming/w_alert_interaction_cue_l_03.png new file mode 100644 index 0000000000000000000000000000000000000000..bd204e1214049c73deb9a385f7e1b46cefdc106f GIT binary patch literal 1292 zcmaJ>U2NM_6n5&-vWAwl3^X>>SuU!!fn(qN*pAh#`ElAtYC@MrtO5<{pPR-sv0dA3 z(rOROo-!mPe)a?}9Y|;ouxS&B2at+N7^?(=Z4dkiO;aUcVhIX*p_9qMS`*N$OWM|xPyp?R~^5J4F_5>YLebX%xK$qilstz9!s z5*segRFvElHJ%wIl7bFpqr&YNC>k+fFrgp5=FDr zf{+sjw_>5UC|PtIQ=sWerQ)vy{f0G3gGeOeas&bt@}TTF-I1!4Zud4BL})9PW;&Xo z6E3498#7LnL`pZeP&PA}ZDQTtN)$>NU6o84_!+ufcK5a6Z96&mzlgn22*tY+AP+NmpPq zwuWMFVY!E5g`@=~$FTB-QEFDfXwh&CyJ(n1a*QPo9@BKysMv?xBih`t2rX?Es)LqM zCN^>`XgkD@Fk(CrWH>Pt;!`XDJeLX%hQi5YA|&#BC_rvu)d%vnS)a&)^qWl?0*`VQ zV3+_^fNGcmfa55MlUX$IoFqXNKu#fPB#(AW=7ADwnowQ3%k73hFWW5zb<{@|YM8F< z+#L+_^rgjkzWR%NZ+(3Lr#w&KZ+ODgM5FIYqE-vUN_e9)R%&a!TKnltxA)9K>(BT_ z%J-adw0C#o`_rGs@IQr@&z-#{@=MW-efCV|W3S&ETicVrIz-%P zZ#)?*c^V(xdSz${6rURTa(;1S{}pR?&|C=_$E%d|EF{+ KE1pkGoca&qUaV>W literal 0 HcmV?d00001 diff --git a/edc/images/Incoming/w_alert_interaction_cue_l_04.png b/edc/images/Incoming/w_alert_interaction_cue_l_04.png new file mode 100644 index 0000000000000000000000000000000000000000..684555221570e564f4afeea979fb1723d9c9e2e8 GIT binary patch literal 1282 zcmaJ>ZD<>19KR5gN^4oRRkq4-k5{2idbzvga&Jr4yj;>|ENw``8e!00?w+(~dw1#G z)ueS|r!u-XsrX?iB1{m$m#U~Rs7|F7@xxF=zxZji-xQRouz|Jlxi+c$POld#e_^i@I(nU2;auic^yfFqCFp6Q`vs$s_lyav;#ngkcYZI*NRfNW{Xn(ybD^t(`WjLW3G5n8}FL9u$ zF?=+VqjJ?0oYV&AEjThiR8;1t6hX!NPk?A$LfIM94>2Ur1wn8*LLmZK5cZtm$aTW7ds++1lyc?C$T#HAHH}VM{}oB2P=EGOI(w$x1OC?F3a#6=lfNl%R41$0{npRKgX4msN#O zB6L~i%Ze;0Op9kPJSB1IP%4pT5)q!J)2tw*lIcuXN^(gy#V6PnHfz|9Y$&khTSLB^ zSn0l4F=av7F|DF$PPeikKWRFqJ!w`!YJ>$(jB18z*6d^M744i@f|m9SR5O;TgY6iL z+8+J|N=hWd6elqZpJr*A=hEQ}6G^3#jKuRy2ybH5d*Zf}pJ)Z?ueM}}Jc?O}qC!Lk zsu6;wIgXIIGK(6XlVzyVkW+9H$s^sAxhI8MODHeh;ch{o$!0mr6ux*=We&XKKM~4)YIL)@1@?2KYiZU{BJ43 zr*CxL@qO05G7yjMyYT%(YZ2h@dH6T40B(5K-p_B1fz#J2GgodN`sSyL-oLM7Z@>Fg yyl-{z#V1D&E{KA literal 0 HcmV?d00001 diff --git a/edc/images/Incoming/w_alert_interaction_cue_r_01.png b/edc/images/Incoming/w_alert_interaction_cue_r_01.png new file mode 100644 index 0000000000000000000000000000000000000000..8d6ae4094137aa668d2cb06de8abae66f063a4b4 GIT binary patch literal 1165 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 JhuN23`w#0vsB!=R literal 0 HcmV?d00001 diff --git a/edc/images/Incoming/w_alert_interaction_cue_r_04.png b/edc/images/Incoming/w_alert_interaction_cue_r_04.png new file mode 100644 index 0000000000000000000000000000000000000000..270f6517c74d609771d01302060ccac9afe5f29d GIT binary patch literal 1280 zcmaJ>U1%It6rSBBY2BK(saTp|&2`d}Mmsw{nSXbiY<4!yRyW3ErBN%*?9AQln9Pqe zlkO&nWNRZEP%KKZ^rfwR(!!z$MJZ^-V3f9Rm5L%to&*I+MVbd`ypv>OA3}$j`+L6c zeD~aQW^Qoca8tB3ieXq&re7IC{hr|4+KAfUN{MCEwfN}~f7mYgCDnykQn&LEWK4Ao z4nb9)dhL4{$FRujMsCC($v!JtGbS2RjN3ksA3q*Fcw|PAIlEX+q1-CKdVO zbY2znnks2*oo6$=z;g_jl+tXH6KOil_X>S{nqhh+Nf0EaFIC58EYDXh4c2`d$oD!{ zc_3C!xlr|OH)q=u^(+`H+P>`-Z3m==d2ryUVd-|s>kO`F?ZgUnjT2Dsb8Qo>##lBs z@h?$IvbT#86qXg!JWY#2x~q@nQmI~65k;24*RlG2aa+qzw1V_Ibs4gVV#ZJuLlmIS z5i~6bgev5D)QEzrLY;;%xyVdDa*H>S6;jjZu0glZ=XNc zb1Xc+W9!J3z13f4&NiQK_`P=i)V?jzyMy4+k!v4b?)kHNGwk193FoE9zAi@RpSk$z zClz;M_l2u(G&XmpTdP0MEEDg2DfHZU)2i%xsJ8HyR1uq6 zR9l!+XJ2`A=V$mC@b}De^9x6wK3H3cWU~+7x|5{O{qX^|wD;pPw|idRS1CWqULXG9 wA8@0ZgLfjIvOAAoD$IT(zSObf^9C%`h%w=o(@WPoF9-jmOnN}6^^TtW57eZmQ~&?~ literal 0 HcmV?d00001 diff --git a/inc/presenters/AcceptRejectPresenter.h b/inc/presenters/AcceptRejectPresenter.h index 5268f0d..41f426e 100644 --- a/inc/presenters/AcceptRejectPresenter.h +++ b/inc/presenters/AcceptRejectPresenter.h @@ -62,6 +62,7 @@ namespace callui { ucl::Result createWidget(ucl::ElmWidget &parent); ucl::Result createAcceptBtn(); ucl::Result createRejectBtn(); + ucl::Result createMotionSensorPresenter(); ucl::StyledWidgetSRef createBtn(const ucl::ElmStyle &style, const ucl::EdjePart &part); @@ -75,12 +76,14 @@ namespace callui { void onBtnClicked(ucl::Widget &widget, void *eventInfo); Eina_Bool onRotaryEvent(Eext_Rotary_Event_Info *info); + void onMotionEvent(); bool onAcceptPopupEvent(AcceptDialog &popup, AcceptDialogEvent event); private: ucl::LayoutSRef m_widget; AcceptDialogWRef m_popup; + MotionSensorPresenterSRef m_motionPrs; ucl::StyledWidgetSRef m_accept; ucl::StyledWidgetSRef m_reject; diff --git a/inc/presenters/MotionSensorPresenter.h b/inc/presenters/MotionSensorPresenter.h new file mode 100644 index 0000000..4e6041f --- /dev/null +++ b/inc/presenters/MotionSensorPresenter.h @@ -0,0 +1,54 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CALLUI_PRESENTERS_MOTION_SENSOR_PRESENTER_H__ +#define __CALLUI_PRESENTERS_MOTION_SENSOR_PRESENTER_H__ + +#include + +#include "types.h" + +namespace callui { + + class MotionSensorPresenter final + { + public: + class Builder { + public: + Builder(); + ~Builder(); + MotionSensorPresenterSRef build(const MotionSensorHandler handler) const; + }; + private: + friend class ucl::ReffedObj; + MotionSensorPresenter(const MotionSensorHandler &handler); + virtual ~MotionSensorPresenter(); + + ucl::Result prepare(); + + void onGestureCb(gesture_type_e motion, + const gesture_data_h data, + double timeStamp, + gesture_error_e error); + + private: + MotionSensorHandler m_handler; + gesture_h m_gesture; + }; + +} + +#endif // __CALLUI_PRESENTERS_MOTION_SENSOR_PRESENTER_H__ diff --git a/inc/presenters/types.h b/inc/presenters/types.h index 4978b78..516fc87 100644 --- a/inc/presenters/types.h +++ b/inc/presenters/types.h @@ -75,10 +75,12 @@ namespace callui { UCL_DECLARE_REF_ALIASES(MoreOptionsPresenter); UCL_DECLARE_REF_ALIASES(DeviceStatePresenter); + UCL_DECLARE_REF_ALIASES(MotionSensorPresenter); using AcceptDialogHandler = ucl::WeakDelegate; using RejectMsgStateHandler = ucl::WeakDelegate; using RejectMsgSelectHandler = ucl::WeakDelegate; + using MotionSensorHandler = ucl::WeakDelegate; } #endif // __CALLUI_PRESENTERS_TYPES_H__ diff --git a/src/presenters/AcceptRejectPresenter.cpp b/src/presenters/AcceptRejectPresenter.cpp index 97d00ac..33ba40c 100644 --- a/src/presenters/AcceptRejectPresenter.cpp +++ b/src/presenters/AcceptRejectPresenter.cpp @@ -18,6 +18,7 @@ #include "model/IIncomingCall.h" #include "presenters/AcceptDialog.h" +#include "presenters/MotionSensorPresenter.h" #include "../view/common.h" #include "common.h" @@ -34,6 +35,7 @@ namespace callui { namespace { namespace impl { constexpr EdjeSignal SIGNAL_REJECT_SHOW {"reject,show"}; constexpr EdjeSignal SIGNAL_REJECT_HIDE {"reject,hide"}; + constexpr EdjeSignal SIGNAL_ARROWS_SHOW {"arrows,show"}; constexpr EdjeSignal SIGNAL_RESET {"reset"}; constexpr EdjePart PART_SWL_BTN_ACCEPT {"swl.button_accept"}; @@ -136,6 +138,11 @@ namespace callui { FAIL_RETURN(createRejectBtn(), "createRejectBtn() failed!"); + // Motion sensor not supported on Emulator + if (createMotionSensorPresenter() != RES_OK) { + ELOG("createMotionSensorPresenter() failed!"); + } + addRotaryEventHandler(CALLBACK_A( AcceptRejectPresenter::onRotaryEvent), this); @@ -194,6 +201,25 @@ namespace callui { return RES_OK; } + Result AcceptRejectPresenter::createMotionSensorPresenter() + { + m_motionPrs = MotionSensorPresenter::Builder(). + build(WEAK_DELEGATE(AcceptRejectPresenter::onMotionEvent, + asWeak(*this))); + + if (!m_motionPrs) { + LOG_RETURN(RES_FAIL, + "MotionSensorPresenter::build() failed!"); + } + + return RES_OK; + } + + void AcceptRejectPresenter::onMotionEvent() + { + m_widget->emit(impl::SIGNAL_ARROWS_SHOW); + } + void AcceptRejectPresenter::onBtnPressed(Widget &widget, void *eventInfo) { if (widget == (*m_accept)) { diff --git a/src/presenters/MotionSensorPresenter.cpp b/src/presenters/MotionSensorPresenter.cpp new file mode 100644 index 0000000..4914528 --- /dev/null +++ b/src/presenters/MotionSensorPresenter.cpp @@ -0,0 +1,100 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "presenters/MotionSensorPresenter.h" + +#include "common.h" + +namespace callui { + + using namespace ucl; + + MotionSensorPresenter::Builder::Builder() + { + } + + MotionSensorPresenter::Builder::~Builder() + { + } + + MotionSensorPresenterSRef + MotionSensorPresenter::Builder::build( + const MotionSensorHandler handler) const + { + auto result = makeShared(handler); + FAIL_RETURN_VALUE(result->prepare(), + {}, "result->prepare() failed!"); + return result; + } + + MotionSensorPresenter::MotionSensorPresenter( + const MotionSensorHandler &handler): + m_handler(handler), + m_gesture(nullptr) + { + } + + MotionSensorPresenter::~MotionSensorPresenter() + { + if (m_gesture) { + gesture_stop_recognition(m_gesture); + gesture_release(m_gesture); + } + } + + Result MotionSensorPresenter::prepare() + { + int res = gesture_create(&m_gesture); + if (res != GESTURE_ERROR_NONE) { + LOG_RETURN(RES_FAIL, "gesture_create() failed. " + "res[%d] msg[%s]", res, get_error_message(res)); + } + + res = gesture_start_recognition(m_gesture, GESTURE_WRIST_UP, + GESTURE_OPTION_ALWAYS_ON, + CALLBACK_B(MotionSensorPresenter::onGestureCb), + this); + if (res != GESTURE_ERROR_NONE) { + LOG_RETURN(RES_FAIL, "gesture_start_recognition() failed. " + "res[%d] msg[%s]", res, get_error_message(res)); + } + return RES_OK; + } + + void MotionSensorPresenter::onGestureCb(gesture_type_e motion, + const gesture_data_h data, + double timeStamp, + gesture_error_e error) + { + if (error) { + LOG_RETURN_VOID(RES_FAIL, "Error occured. " + "err[%d] msg[%s]", error, get_error_message(error)); + } + + if (motion == GESTURE_WRIST_UP) { + gesture_event_e event; + int res = gesture_get_event(data, &event); + if (res != GESTURE_ERROR_NONE) { + LOG_RETURN_VOID(RES_FAIL, "gesture_get_event() failed. " + "err[%d] msg[%s]", res, get_error_message(res)); + } + + if (event == GESTURE_EVENT_DETECTED && m_handler) { + m_handler(); + } + } + } +} -- 2.34.1