From 749990aadb2a8c20ca13e2ff364602f7577e675c Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Sun, 15 Jul 2012 03:10:55 -0300 Subject: [PATCH] callscreen: improve multiparty details look and feel. instead of a boring list and buttons use a scroller with a box of layouts for each item. --- Makefile.am | 7 +- data/themes/default.edc | 1 + data/themes/images/bt_multiparty_hangup.png | Bin 0 -> 1993 bytes .../themes/images/bt_multiparty_hangup_confirm.png | Bin 0 -> 3385 bytes data/themes/images/bt_multiparty_private.png | Bin 0 -> 2218 bytes .../images/bt_multiparty_private_confirm.png | Bin 0 -> 3442 bytes data/themes/includes/call.edc | 5 + data/themes/includes/multiparty-list.edc | 926 +++++++++++++++++++++ dialer/callscreen.c | 110 ++- 9 files changed, 1017 insertions(+), 32 deletions(-) create mode 100644 data/themes/images/bt_multiparty_hangup.png create mode 100644 data/themes/images/bt_multiparty_hangup_confirm.png create mode 100644 data/themes/images/bt_multiparty_private.png create mode 100644 data/themes/images/bt_multiparty_private_confirm.png create mode 100644 data/themes/includes/multiparty-list.edc diff --git a/Makefile.am b/Makefile.am index 4a65f54..eb761eb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -72,7 +72,11 @@ data/themes/images/bt_keypad_pressed.png \ data/themes/images/bt_keypad_released.png \ data/themes/images/bt_merge_pressed.png \ data/themes/images/bt_merge_released.png \ +data/themes/images/bt_multiparty_hangup.png \ +data/themes/images/bt_multiparty_hangup_confirm.png \ data/themes/images/bt_multiparty_pressed.png \ +data/themes/images/bt_multiparty_private.png \ +data/themes/images/bt_multiparty_private_confirm.png \ data/themes/images/bt_multiparty_released.png \ data/themes/images/bt_mute_pressed.png \ data/themes/images/bt_mute_released.png \ @@ -85,7 +89,8 @@ THEME_INCLUDES = \ data/themes/includes/call.edc \ data/themes/includes/colors.edc \ data/themes/includes/keypad.edc \ -data/themes/includes/main.edc +data/themes/includes/main.edc \ +data/themes/includes/multiparty-list.edc EXTRA_DIST = data/themes/default.edc $(THEME_INCLUDES) $(THEME_IMAGES) diff --git a/data/themes/default.edc b/data/themes/default.edc index 7f93943..2b9e39c 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -4,5 +4,6 @@ collections { #include "includes/main.edc" #include "includes/keypad.edc" #include "includes/call.edc" +#include "includes/multiparty-list.edc" } diff --git a/data/themes/images/bt_multiparty_hangup.png b/data/themes/images/bt_multiparty_hangup.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ed6c5db93554f713293bfe681039a92be66ee7 GIT binary patch literal 1993 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q1|(OsS<3+_$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%xRe+5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8oy6KF3~uQ^`5R?bDKi6!|(A^G_^uoMuGkzbNu zoRMFk;2dnK;G3A7nFr#7q6gwzm(-%nveXo}qWoM1aQIqfVzHmFzae^4$O$ujpkwqw zi32IIz=VJ)5X6KheIN&(c~bL$Ii?7hH8`xhJb^jxr>Bc!NX4xuv#q_g9Yq?>ulpGK zgW=#I@$ALZ1Zy5JFY0J*jfi&n7S?rk??2|p%r1huM-NFKVZWh~u~9p zlz-@OILXXW<8UqQ&FXogXSi1HBxeG1h`z@^me+C`EHmuSC!{U-x4vn%YU|{iHPOC` zt>Q<^va>c$Q#d!VC3mBz_N2~Y*KbBL;!7r+)6Fbod^f>ym&1-HY*(5j9;+ZS93?*ZS73 zTfMsZ*RQJGyBmCrcd;f%RVk`l+S;~m-fX;M=g!9K*Tc7d4ijk<6!E^&*T=VF#flT# ztP7*kH&0kyZD((P_|>abT;G5G%#_rcylvYyr}T97p1!_S=cnBbiC**X99vFmDk~o! zUru|H=B`gqo-E-yt!XbH@Nma=+4t|?Z`iYkXZGyb@oZ@!A|=URW=)$m&F3y}cUaQ< zU%#Z78X0nOauV){xda;QJAVB5!zWKvf~Tu)QFz!G9TgR{RUj-mQt0&Gzkjz(d%`ql z)~u$zdu`txn>}mRg6-SGb*rnY7Hr%oC?zFzX`5iL+r!6?nYV4<{_x$qbCY(<$;+qn zcR2PI{L(*m>EFM)ue&+ILPMusE-^MSVadZb|Io?JVA-2LjKX$;Sw zKcBfj;*+&ZEH~?NZSD)lvsjvAzki%^VCnnbg{LhAqS>}M`{+t^y6mWluiv+8*Cx?` zX;0TYa~FG%x-Bp1`}(z~KYTEF^X{Efc({1DeSzGO)}1%^3B;P5V|pT3a{cAY%-ifU z-@VHd6$;k{T2)X{!NJeZuX+D4>yK;K#ERV$XYCCWX}!=V94O)$7%2GhXU&owJ7!Fo zGG)T0OF=x^_ie{zDUscA}HUZ08(r}=@SJ(e>~qy8A(&2KsUYKgw5P)~2K zW9ioDO+PpI^%_6^x#aS959zw@BkP|Be~+`R5u6;R`orXUIN*4k lm-r_}ZoXgJoAxvDFoYPJOp=fS?83{1OOj$B{2X1 literal 0 HcmV?d00001 diff --git a/data/themes/images/bt_multiparty_hangup_confirm.png b/data/themes/images/bt_multiparty_hangup_confirm.png new file mode 100644 index 0000000000000000000000000000000000000000..e8424d3b72bd04b6f1c97548c9341070e36eee99 GIT binary patch literal 3385 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 s*9BgAd!9{iW;$BOwB4z3cuk1MoonZP3d-VE zRKx{Wq=FAcZ~+OXu2?}-9-9SJ5D`#80YP||w)VY0dfIc|J?GwU=H8k4%{TL#^PQW$ zI><*?+e8}xpzG&L4S`q1+^wYsKLeva9f22PsrOoGs3=aF!V+@O{P!Z{NN1bdVd7Q$k%P8i6^0V0ra zP9!WA^~Z&V(ZrlMQV5my2NtZ6(LAX%nS{Zlq@*~e;2cHbcnm}&66az#IXS=<4w6)% zlqGWzN-VxcpmHT_F+W+#7YR{w5m~XKjZ!ii&h+;!2$JdaKLZOTe-sKX8AirR#z2l( zj6g8AuivaC(h%-{)A&nkNmyz!7Zbvjh&GDZa6jTKzBjE28Ba`+q)7UznEAc8ZN;DmK?g&-p23VBmpUGR8s7s!hUeU0%~z7UP- z>Wm{0J*fm71bIV5JjIpfOoec+G;bP2!+-Vl6H25kA)EUZmk;Cq;p_Uhz9cU(mn9X6 z!$hK_uMAkt6G=r9o+ugR6^cjES!}*=PM>Sf@4KaP#r#cN4oxf)pnj__iT@Y)|Ge+t zeL4S6%`k8>m^pI%4_Usxf*Cj`{z-jU`Ez)}t@Musdon-*bFY%*N!es4liz5RK z)|=ffyPEGW4?pj2%hES6vY|JfgEGSD9+w#^bWuPQc7<+EvrR~=*3w;&FJeO?<%w$N zAj8?_Aa9@HI(Dqh6N38d>*E2|)jhpj($JBCBg#>7pd#==jmCP-N82 z&LnzzX3$O|c3-~iTpZ*x+C?vsge;3*mHOe-$&>2O@}USV1(c4=+`W5uV`JkXT)Y!l z{x~2pv8+otGBmV=SN={?gJeWS-AMbGP_^zMnD)uc%zXOv>B1deJM;C`yJxh<^>w*i zt}}A`G+@f^MLb++p>KB zLu#1~4W1h6u4!Yu&6}_L-`jh5+jdYMb+tq~PQ<&ohzETAK=ch60-Vn-$;ilvsED>b zWBqn~N+K51Xtar`(}S%Q#~}6(2~V~d5_I*H6WdRH&l}bpE2xbgxy)}_446}&hR9^H zTMC|gf3a#~R8;54G5Pp#aWn6f9>_~BqAar^jn0lyD33vwr|Vr{T4+Jukf1DM==!ik3#?2PJ((E@6G z@0fH=s*$4LXLI_@`*rRwG?e!b*p=#L1Qa^1LDs)`zukUj`QYLJy#=07~~_H9yvvEG1z9#CxRe^7|=I%-HkHkl*CfMV(~eH5+L`{Km_ zQnC2EqX=WL_qp{$#=j;~!_`0&V0EjOGK z5LOpWXki%?Ju>L(>gw4#SzoVEGLIA0P=_o$CUSNtmCB15pw7t1D0J9;Y@o%u4WOoG zrzb;mT-3J^Omb^$YsXq|iD`<~LEY+Rt5di8I(MPp=8&^ zYd&R~n3(L$)}x;IA?WG%>;n3yPN zIg(BSkmcgq-uCu&Gm?URreHNMDQUX) zuC=A*3H{Etwt>;fpTYT7}aVO)9_S@pCMY#23sG@a#dn_Bu?|^&);PZr z*qAl6IV0`v(5Aw|LLImCfybxO$BZnR^w-xUFMof=yGGKGm6i26xPBN~BBImj$k}fJ z@`~283+t^v1kHD|==+#P5VW5{e^D8djA6$2lsC%9UN;YQRPWfaLtoF=ovGJGUv9Kv zJ@sA8B+Qw(M@JoSfWe&g$-m<@y@!acNgX|7Uv{#Y)@!IS8b!=WPfWC1!lray8d7Eb zf@s<#l{OL8mb=gDsVlDembBSP^LORstiJQO&)q3FI(nG{=&qwu>PzeDmMyVo1XS&; zsX)7$>4LpMJq>bfjqH7_GX@vV-c{J` zUOI&K6*3eg91dr2$0kW(YHE5teRk%^5i?tG{22u&y`ggupBNq-yvP=O7q8MoT3T8* z`zhUzRlo-j9{;huDv`4s)n;Ci{TMl-Z>y` zkej8>M5LvWu5}`Z(2D@s$q`3QUnCscszf=Ua%mRRho`2d?Ck8WW;~KG5~@t@Y1-~g z08P23gkO#jEn2N!cj_OY#(KbA#15y&ylQD{%l?p8_R8h$!pT>@DeJ3+mV*bvI$B3M zsz)YA`&S&kvNbfj17kxV7=fLpmP^3ptPi83x4uP{7G+8i zjH~E+o^v>Zac?4xwc@#TV{PEU%_jvx9*t znM{D);%>gR+tKu%c6xI{6{Y3sB*tt{0y_H8129cF+-T1POM%rq1%es-55mA$K2Qh! WG!NY%OJdX9Uyz@75VhQsneiWxb*~cu literal 0 HcmV?d00001 diff --git a/data/themes/includes/call.edc b/data/themes/includes/call.edc index 81f091a..f85f26a 100644 --- a/data/themes/includes/call.edc +++ b/data/themes/includes/call.edc @@ -1766,6 +1766,11 @@ group { source: "button.multiparty-details-back"; action: SIGNAL_EMIT "hide,multiparty-details" "call"; } + program { + signal: "multiparty,private"; + source: "call"; + action: SIGNAL_EMIT "hide,multiparty-details" "call"; + } } programs { diff --git a/data/themes/includes/multiparty-list.edc b/data/themes/includes/multiparty-list.edc new file mode 100644 index 0000000..adae8bb --- /dev/null +++ b/data/themes/includes/multiparty-list.edc @@ -0,0 +1,926 @@ +group { + name: "elm/scroller/base/multiparty-details"; + + script { + public sbvis_v, sbalways_v, sbvis_timer; + public timer0(val) { + new v; + v = get_int(sbvis_v); + if (v) { + v = get_int(sbalways_v); + if (!v) { + emit("do-hide-vbar", ""); + set_int(sbvis_v, 0); + } + } + set_int(sbvis_timer, 0); + return 0; + } + } + + parts { + part { + name: "clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + } + } + + part { + name: "elm.swallow.content"; + clip_to: "clipper"; + type: SWALLOW; + description { + state: "default" 0.0; + } + } + + part { + name: "sb_vbar_clip_master"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + } + description { + state: "hidden" 0.0; + color: 255 255 255 0; + visible: 0; + } + } + + part { + name: "sb_vbar_clip"; + clip_to: "sb_vbar_clip_master"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + } + description { + state: "hidden" 0.0; + color: 255 255 255 0; + visible: 0; + } + } + + part { + name: "sb_vbar"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + fixed: 1 1; + visible: 0; + min: 16 16; + align: 1.0 0.0; + rel1 { + relative: 1.0 0.0; + offset: -1 0; + } + rel2 { + relative: 1.0 1.0; + offset: -1 -1; + } + } + } + + part { + name: "elm.dragable.vbar"; + type: RECT; + clip_to: "sb_vbar_clip"; + mouse_events: 0; + dragable { + x: 0 0 0; + y: 1 1 0; + confine: "sb_vbar"; + } + description { + state: "default" 0.0; + color: 255 255 255 255; + color_class: "light"; + fixed: 1 1; + min: 16 16; + max: 16 99999; + rel1 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_vbar"; + } + rel2 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_vbar"; + } + } + } + } + + programs { + program { + signal: "load"; + source: ""; + script { + set_state(PART:"sb_vbar_clip", "hidden", 0.0); + set_int(sbvis_v, 0); + set_int(sbalways_v, 0); + set_int(sbvis_timer, 0); + } + } + + program { + name: "vbar_show"; + signal: "elm,action,show,vbar"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "sb_vbar_clip_master"; + } + + program { + name: "vbar_hide"; + signal: "elm,action,hide,vbar"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "sb_vbar_clip_master"; + } + + program { + name: "vbar_show_always"; + signal: "elm,action,show_always,vbar"; + source: "elm"; + script { + new v; + v = get_int(sbvis_v); + v |= get_int(sbalways_v); + if (!v) { + set_int(sbalways_v, 1); + emit("do-show-vbar", ""); + set_int(sbvis_v, 1); + } + } + } + + program { + name: "vbar_show_notalways"; + signal: "elm,action,show_notalways,vbar"; + source: "elm"; + script { + new v; + v = get_int(sbalways_v); + if (v) { + set_int(sbalways_v, 0); + v = get_int(sbvis_v); + if (!v) { + emit("do-hide-vbar", ""); + set_int(sbvis_v, 0); + } + } + } + } + + program { + signal: "do-show-vbar"; + source: ""; + action: STATE_SET "default" 0.0; + transition: LINEAR 0.5; + target: "sb_vbar_clip"; + } + + program { + signal: "do-hide-vbar"; + source: ""; + action: STATE_SET "hidden" 0.0; + transition: LINEAR 0.5; + target: "sb_vbar_clip"; + } + + program { + name: "scroll"; + signal: "elm,action,scroll"; + source: "elm"; + script { + new v; + v = get_int(sbvis_v); + v |= get_int(sbalways_v); + if (!v) { + emit("do-show-vbar", ""); + set_int(sbvis_v, 1); + } + v = get_int(sbvis_timer); + if (v > 0) cancel_timer(v); + v = timer(1.0, "timer0", 0); + set_int(sbvis_timer, v); + } + } + } +} + +group { + name: "elm/layout/dialer/multiparty-details"; + + images { + image: "bt_multiparty_hangup.png" COMP; + image: "bt_multiparty_hangup_confirm.png" COMP; + image: "bt_multiparty_private.png" COMP; + image: "bt_multiparty_private_confirm.png" COMP; + } + + parts { + part { + name: "cancel.area"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + visible: 0; + rel1.offset: -1000 -1000; + rel2.offset: 1000 1000; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + programs { + program { + name: "do_cancel"; + after: "show_hangup_ico_up"; + after: "show_hangup_confirm_up_phase1"; + after: "show_private_ico_up"; + after: "show_private_confirm_up_phase1"; + } + + program { + name: "ask_raise"; + action: SIGNAL_EMIT "raise" "call"; + } + + program { + signal: "mouse,down,1"; + source: "cancel.area"; + after: "do_cancel"; + } + program { + signal: "mouse,down,1"; + source: "hangup.blocker"; + after: "do_cancel"; + } + program { + signal: "mouse,down,1"; + source: "private.blocker"; + after: "do_cancel"; + } + + program { + name: "show_hangup_cancel"; + after: "ask_raise"; + after: "show_hangup_cancel_phase2"; + } + program { + name: "show_hangup_cancel_phase2"; + action: STATE_SET "visible" 0.0; + target: "cancel.area"; + target: "private.blocker"; + transition: ACCELERATE 0.3; + } + + program { + name: "hide_hangup_cancel"; + action: STATE_SET "default" 0.0; + target: "cancel.area"; + target: "private.blocker"; + transition: ACCELERATE 0.3; + } + + program { + name: "show_private_cancel"; + after: "ask_raise"; + after: "show_private_cancel_phase2"; + } + program { + name: "show_private_cancel_phase2"; + action: STATE_SET "visible" 0.0; + target: "cancel.area"; + target: "hangup.blocker"; + transition: ACCELERATE 0.3; + } + + program { + name: "hide_private_cancel"; + action: STATE_SET "default" 0.0; + target: "cancel.area"; + target: "hangup.blocker"; + transition: ACCELERATE 0.3; + } + } + + part { + name: "hangup.area"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel2 { + relative: 0.0 1.0; + offset: 101 -1; + } + } + description { + state: "confirm" 0.0; + inherit: "default" 0.0; + rel2 { + relative: 0.0 1.0; + offset: 127 -1; + } + } + } + + part { + name: "hangup.ico"; + type: IMAGE; + mouse_events: 1; + description { + state: "default" 0.0; + color: 255 255 255 255; + color_class: "action"; + min: 56 56; + max: 56 56; + align: 0.0 0.5; + rel1.offset: 46 0; + rel2 { + relative: 0.0 1.0; + offset: 101 -1; + } + image.normal: "bt_multiparty_hangup.png"; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "light"; + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + visible: 0; + } + } + + part { + name: "hangup.confirm"; + type: IMAGE; + mouse_events: 1; + description { + state: "default" 0.0; + color: 255 255 255 0; + color_class: "caution"; + visible: 0; + min: 128 128; + max: 128 128; + align: 0.0 0.5; + rel2 { + relative: 0.0 1.0; + offset: 127 -1; + } + image.normal: "bt_multiparty_hangup_confirm.png"; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + visible: 1; + } + + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color: 255 255 255 128; + visible: 1; + } + } + + part { + name: "hangup.blocker"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "hangup.confirm"; + rel2.to: "hangup.confirm"; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + programs { + program { + name: "show_hangup_ico_down"; + signal: "mouse,down,1"; + source: "hangup.ico"; + action: STATE_SET "pressed" 0.0; + transition: ACCELERATE 0.1; + target: "hangup.ico"; + } + + program { + name: "show_hangup_ico_up"; + signal: "mouse,up,1"; + source: "hangup.ico"; + action: STATE_SET "default" 0.0; + in: 0.1 0.0; + transition: DECELERATE 0.1; + target: "hangup.ico"; + } + + program { + name: "clicked_hangup_ico_phase1"; + signal: "mouse,clicked,1"; + source: "hangup.ico"; + action: ACTION_STOP; + target: "show_hangup_ico_up"; + after: "clicked_hangup_ico_phase2"; + } + program { + name: "clicked_hangup_ico_phase2"; + action: STATE_SET "hidden" 0.0; + target: "hangup.ico"; + after: "clicked_hangup_ico_phase3.1"; + after: "clicked_hangup_ico_phase3.2"; + } + program { + name: "clicked_hangup_ico_phase3.1"; + action: STATE_SET "visible" 0.0; + transition: DECELERATE 0.1; + target: "hangup.confirm"; + } + program { + name: "clicked_hangup_ico_phase3.2"; + action: STATE_SET "confirm" 0.0; + transition: DECELERATE 0.1; + target: "hangup.area"; + after: "show_hangup_cancel"; + } + + program { + name: "show_hangup_confirm_down"; + signal: "mouse,down,1"; + source: "hangup.confirm"; + action: STATE_SET "pressed" 0.0; + transition: ACCELERATE 0.1; + target: "hangup.confirm"; + } + + program { + name: "show_hangup_confirm_up_phase1"; + signal: "mouse,up,1"; + source: "hangup.confirm"; + action: STATE_SET "hidden" 0.0; + in: 0.1 0.0; + transition: DECELERATE 0.1; + target: "hangup.confirm"; + after: "show_hangup_confirm_up_phase2.1"; + after: "show_hangup_confirm_up_phase2.2"; + after: "hide_hangup_cancel"; + } + program { + name: "show_hangup_confirm_up_phase2.1"; + action: STATE_SET "default" 0.0; + transition: ACCELERATE 0.1; + target: "hangup.ico"; + } + program { + name: "show_hangup_confirm_up_phase2.2"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.1; + target: "hangup.area"; + } + + program { + name: "clicked_hangup_confirm_phase1"; + signal: "mouse,clicked,1"; + source: "hangup.confirm"; + action: ACTION_STOP; + target: "show_hangup_confirm_up_phase1"; + target: "show_hangup_confirm_up_phase2.1"; + target: "show_hangup_confirm_up_phase2.2"; + after: "clicked_hangup_confirm_phase2"; + after: "hide_hangup_cancel"; + } + program { + name: "clicked_hangup_confirm_phase2"; + action: STATE_SET "hidden" 0.0; + target: "hangup.confirm"; + after: "clicked_hangup_confirm_phase3.1"; + after: "clicked_hangup_confirm_phase3.2"; + after: "clicked_hangup_confirm_phase3.3"; + } + program { + name: "clicked_hangup_confirm_phase3.1"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.1; + target: "hangup.ico"; + } + program { + name: "clicked_hangup_confirm_phase3.2"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.1; + target: "hangup.area"; + } + program { + name: "clicked_hangup_confirm_phase3.3"; + action: SIGNAL_EMIT "clicked,hangup" "call"; + } + } + + + part { + name: "private.area"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1 { + relative: 1.0 0.0; + offset: -102 0; + } + } + description { + state: "confirm" 0.0; + inherit: "default" 0.0; + rel1 { + relative: 1.0 0.0; + offset: -128 0; + } + } + } + + part { + name: "private.ico"; + type: IMAGE; + mouse_events: 1; + description { + state: "default" 0.0; + color: 255 255 255 255; + color_class: "action"; + min: 56 56; + max: 56 56; + align: 0.0 0.5; + rel1 { + relative: 1.0 0.0; + offset: -102 0; + } + rel2 { + relative: 1.0 1.0; + offset: -47 -1; + } + image.normal: "bt_multiparty_private.png"; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "light"; + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + visible: 0; + } + } + + part { + name: "private.label"; + type: TEXT; + mouse_events: 0; + description { + state: "default" 0.0; + color: 255 255 255 255; + color_class: "action"; + align: 0.5 0.0; + fixed: 1 1; + rel1 { + to: "private.ico"; + relative: 0.5 1.0; + offset: 0 2; + } + rel2 { + to_x: "private.ico"; + relative: 0.5 1.0; + offset: -1 -1; + } + text { + text: "PRIVATE"; + font: "Verdana"; + size: 24; + min: 1 1; + align: 0.5 0.0; + } + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color_class: "light"; + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + visible: 0; + } + } + + part { + name: "private.confirm"; + type: IMAGE; + mouse_events: 1; + description { + state: "default" 0.0; + color: 255 255 255 0; + color_class: "caution"; + visible: 0; + min: 128 128; + max: 128 128; + align: 0.0 0.5; + rel1 { + relative: 1.0 0.0; + offset: -128 0; + } + image.normal: "bt_multiparty_private_confirm.png"; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + visible: 1; + } + + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color: 255 255 255 128; + visible: 1; + } + } + + part { + name: "private.blocker"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "private.confirm"; + rel2.to: "private.confirm"; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + programs { + program { + name: "show_private_ico_down"; + signal: "mouse,down,1"; + source: "private.ico"; + action: STATE_SET "pressed" 0.0; + transition: ACCELERATE 0.1; + target: "private.ico"; + target: "private.label"; + } + + program { + name: "show_private_ico_up"; + signal: "mouse,up,1"; + source: "private.ico"; + action: STATE_SET "default" 0.0; + in: 0.1 0.0; + transition: DECELERATE 0.1; + target: "private.ico"; + target: "private.label"; + } + + program { + name: "clicked_private_ico_phase1"; + signal: "mouse,clicked,1"; + source: "private.ico"; + action: ACTION_STOP; + target: "show_private_ico_up"; + after: "clicked_private_ico_phase2"; + } + program { + name: "clicked_private_ico_phase2"; + action: STATE_SET "hidden" 0.0; + target: "private.ico"; + target: "private.label"; + after: "clicked_private_ico_phase3.1"; + after: "clicked_private_ico_phase3.2"; + } + program { + name: "clicked_private_ico_phase3.1"; + action: STATE_SET "visible" 0.0; + transition: DECELERATE 0.1; + target: "private.confirm"; + } + program { + name: "clicked_private_ico_phase3.2"; + action: STATE_SET "confirm" 0.0; + transition: DECELERATE 0.1; + target: "private.area"; + after: "show_private_cancel"; + } + + program { + name: "show_private_confirm_down"; + signal: "mouse,down,1"; + source: "private.confirm"; + action: STATE_SET "pressed" 0.0; + transition: ACCELERATE 0.1; + target: "private.confirm"; + } + + program { + name: "show_private_confirm_up_phase1"; + signal: "mouse,up,1"; + source: "private.confirm"; + action: STATE_SET "hidden" 0.0; + in: 0.1 0.0; + transition: DECELERATE 0.1; + target: "private.confirm"; + after: "show_private_confirm_up_phase2.1"; + after: "show_private_confirm_up_phase2.2"; + after: "hide_private_cancel"; + } + program { + name: "show_private_confirm_up_phase2.1"; + action: STATE_SET "default" 0.0; + transition: ACCELERATE 0.1; + target: "private.ico"; + target: "private.label"; + } + program { + name: "show_private_confirm_up_phase2.2"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.1; + target: "private.area"; + } + + program { + name: "clicked_private_confirm_phase1"; + signal: "mouse,clicked,1"; + source: "private.confirm"; + action: ACTION_STOP; + target: "show_private_confirm_up_phase1"; + target: "show_private_confirm_up_phase2.1"; + target: "show_private_confirm_up_phase2.2"; + after: "clicked_private_confirm_phase2"; + after: "hide_private_cancel"; + } + program { + name: "clicked_private_confirm_phase2"; + action: STATE_SET "hidden" 0.0; + target: "private.confirm"; + after: "clicked_private_confirm_phase3.1"; + after: "clicked_private_confirm_phase3.2"; + after: "clicked_private_confirm_phase3.3"; + } + program { + name: "clicked_private_confirm_phase3.1"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.1; + target: "private.ico"; + target: "private.label"; + } + program { + name: "clicked_private_confirm_phase3.2"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.1; + target: "private.area"; + } + program { + name: "clicked_private_confirm_phase3.3"; + action: SIGNAL_EMIT "clicked,private" "call"; + } + } + + part { + name: "elm.text.name"; + type: TEXT; + mouse_events: 0; + scale: 1; + api: "name" "party name"; + description { + state: "default" 0.0; + color: 255 255 255 255; + color_class: "action"; + rel1 { + to_x: "hangup.area"; + relative: 1.0 0.0; + offset: 16 16; + } + rel2 { + to_x: "private.area"; + relative: 0.0 0.5; + offset: -17 0; + } + text { + text: "Name Here"; + font: "Verdana"; + size: 58; + min: 1 1; + align: -1.0 1.0; + } + } + description { + state: "alternate" 0.0; + inherit: "default" 0.0; + color: 255 0 0 255; + visible: 0; + } + } + + part { + name: "elm.text.number"; + type: TEXT; + mouse_events: 0; + scale: 1; + api: "number" "party number"; + description { + state: "default" 0.0; + color: 255 255 255 255; + color_class: "light"; + rel1 { + to_x: "hangup.area"; + relative: 1.0 0.5; + offset: 16 0; + } + rel2 { + to_x: "private.area"; + relative: 0.0 1.0; + offset: -17 -17; + } + text { + text: "3333-4444"; + font: "Verdana"; + size: 43; + min: 1 1; + align: -1.0 0.0; + } + } + description { + state: "alternate" 0.0; + inherit: "default" 0.0; + color_class: "action"; + rel1 { + to_x: "hangup.area"; + relative: 1.0 0.0; + offset: 16 16; + } + rel2 { + to_x: "private.area"; + relative: 0.0 1.0; + offset: -17 -17; + } + text { + text: "3333-4444"; + font: "Verdana"; + size: 58; + min: 1 1; + align: -1.0 0.5; + } + } + } + + programs { + program { + signal: "show,name"; + source: "call"; + action: STATE_SET "default" 0.0; + target: "elm.text.name"; + target: "elm.text.number"; + } + + program { + signal: "hide,name"; + source: "call"; + action: STATE_SET "alternate" 0.0; + target: "elm.text.name"; + target: "elm.text.number"; + } + } + } +} diff --git a/dialer/callscreen.c b/dialer/callscreen.c index 0f84865..3d2be75 100644 --- a/dialer/callscreen.c +++ b/dialer/callscreen.c @@ -10,7 +10,11 @@ typedef struct _Callscreen { Evas_Object *self; - Evas_Object *multiparty; + struct { + Evas_Object *sc; + Evas_Object *bx; + Eina_List *calls; + } multiparty; struct { OFono_Call *active; OFono_Call *waiting; @@ -31,79 +35,109 @@ typedef struct _Callscreen } Callscreen; static void _on_mp_hangup(void *data, Evas_Object *o __UNUSED__, - void *event_info __UNUSED__) + const char *emission __UNUSED__, + const char *source __UNUSED__) { OFono_Call *call = data; DBG("User ask hangup of multiparty call=%p", call); ofono_call_hangup(call, NULL, NULL); } -static void _on_mp_pvt(void *data, Evas_Object *o __UNUSED__, - void *event_info __UNUSED__) +static void _on_mp_pvt_reply(void *data, OFono_Error err) +{ + Callscreen *ctx = data; + + DBG("PrivateChat: err=%d", err); + + if (err == OFONO_ERROR_NONE) + elm_object_signal_emit(ctx->self, "multiparty,private", "call"); +} + +static void _on_mp_pvt(void *data, Evas_Object *o, + const char *emission __UNUSED__, + const char *source __UNUSED__) { + Callscreen *ctx = evas_object_data_get(o, "callscreen.ctx"); OFono_Call *call = data; DBG("User ask private chat of multiparty call=%p", call); - ofono_private_chat(call, NULL, NULL); + ofono_private_chat(call, _on_mp_pvt_reply, ctx); } -static const char *_call_name_or_id(const OFono_Call *call); +static void _on_raise(void *data __UNUSED__, Evas_Object *o, + const char *emission __UNUSED__, + const char *source __UNUSED__) +{ + evas_object_raise(o); +} static void _multiparty_update(Callscreen *ctx) { - const Elm_Object_Item *item; Eina_List *new = NULL, *old = NULL; const Eina_List *n1, *n2; OFono_Call *c; + Evas_Object *it; EINA_LIST_FOREACH(ctx->calls.list, n1, c) { if (ofono_call_multiparty_get(c)) new = eina_list_append(new, c); } - item = elm_list_first_item_get(ctx->multiparty); - for (; item != NULL; item = elm_list_item_next(item)) - old = eina_list_append(old, elm_object_item_data_get(item)); - - if (eina_list_count(new) != eina_list_count(old)) { - eina_list_free(old); + old = ctx->multiparty.calls; + if (eina_list_count(new) != eina_list_count(old)) goto repopulate; - } for (n1 = new, n2 = old; n1 && n2; n1 = n1->next, n2 = n2->next) { if (n1->data != n2->data) break; } - eina_list_free(old); if (n1) goto repopulate; eina_list_free(new); return; repopulate: - elm_list_clear(ctx->multiparty); + eina_list_free(ctx->multiparty.calls); + ctx->multiparty.calls = new; + + elm_box_clear(ctx->multiparty.bx); + if (!new) { elm_object_signal_emit(ctx->self, "hide,multiparty-details", "call"); return; } - EINA_LIST_FREE(new, c) { - const char *t = _call_name_or_id(c); - Evas_Object *h = elm_button_add(ctx->multiparty); - Evas_Object *p = elm_button_add(ctx->multiparty); - Elm_Object_Item *it; + EINA_LIST_FOREACH(new, n1, c) { + const char *name, *number; + + name = ofono_call_name_get(c); + number = ofono_call_line_id_get(c); + + it = gui_layout_add(ctx->multiparty.bx, "multiparty-details"); + evas_object_size_hint_align_set(it, + EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(it); - elm_object_text_set(h, "Hangup"); - evas_object_smart_callback_add(h, "clicked", _on_mp_hangup, c); + elm_object_part_text_set(it, "elm.text.name", name); + elm_object_part_text_set(it, "elm.text.number", number); - elm_object_text_set(p, "Private"); - evas_object_smart_callback_add(p, "clicked", _on_mp_pvt, c); + if ((!name) || (*name == '\0')) + elm_object_signal_emit(it, "hide,name", "call"); + else + elm_object_signal_emit(it, "show,name", "call"); + + elm_object_signal_callback_add(it, "clicked,hangup", "call", + _on_mp_hangup, c); + elm_object_signal_callback_add(it, "clicked,private", "call", + _on_mp_pvt, c); + elm_object_signal_callback_add(it, "raise", "call", + _on_raise, NULL); + + evas_object_data_set(it, "callscreen.ctx", ctx); + elm_box_pack_end(ctx->multiparty.bx, it); - it = elm_list_item_append(ctx->multiparty, t, h, p, NULL, NULL); - elm_object_item_data_set(it, c); } - elm_list_go(ctx->multiparty); elm_object_signal_emit(ctx->self, "show,multiparty-details", "call"); } @@ -768,6 +802,8 @@ static void _on_del(void *data, Evas *e __UNUSED__, eina_stringshare_del(ctx->disconnected.number); + eina_list_free(ctx->multiparty.calls); + eina_list_free(ctx->calls.list); free(ctx); } @@ -800,10 +836,22 @@ Evas_Object *callscreen_add(Evas_Object *parent) { elm_object_part_text_set(obj, "elm.text.status", ""); elm_object_part_text_set(obj, "elm.text.elapsed", ""); - ctx->multiparty = elm_list_add(obj); - elm_list_select_mode_set(ctx->multiparty, ELM_OBJECT_SELECT_MODE_NONE); + ctx->multiparty.sc = elm_scroller_add(obj); + elm_scroller_policy_set(ctx->multiparty.sc, ELM_SCROLLER_POLICY_AUTO, + ELM_SCROLLER_POLICY_OFF); + elm_scroller_bounce_set(ctx->multiparty.sc, EINA_FALSE, EINA_TRUE); + elm_object_style_set(ctx->multiparty.sc, "multiparty-details"); + + ctx->multiparty.bx = elm_box_add(obj); + evas_object_size_hint_weight_set(ctx->multiparty.bx, + EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(ctx->multiparty.bx, + EVAS_HINT_FILL, 0.0); + evas_object_show(ctx->multiparty.bx); + elm_object_content_set(ctx->multiparty.sc, ctx->multiparty.bx); + elm_object_part_content_set(obj, "elm.swallow.multiparty-details", - ctx->multiparty); + ctx->multiparty.sc); ofono_call_added_cb_set(_call_added, ctx); ofono_call_removed_cb_set(_call_removed, ctx); -- 2.7.4