5b6c641f26f8238d7be9e85a21c979cb39b823cd
[apps/home/call.git] / ui / vcui-view-multi-call-conf.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.tizenopensource.org/license
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17
18 #include "vcui-application.h"
19 #include "vcui-view-common.h"
20 #include "vcui-view-elements.h"
21 #include "vcui-view-multi-call-conf.h"
22
23 static int __vcui_view_multi_call_conf_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
24 static int __vcui_view_multi_call_conf_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
25 static int __vcui_view_multi_call_conf_onhide(voice_call_view_data_t *view_data);
26 static int __vcui_view_multi_call_conf_onshow(voice_call_view_data_t *view_data);
27 static int __vcui_view_multi_call_conf_ondestroy(voice_call_view_data_t *view_data);
28
29 static voice_call_view_data_t s_view = {
30         .type = VIEW_INCALL_MULTICALL_CONF_VIEW,
31         .app_data = NULL,
32         .layout = NULL,
33         .onCreate = __vcui_view_multi_call_conf_oncreate,
34         .onUpdate = __vcui_view_multi_call_conf_onupdate,
35         .onHide = __vcui_view_multi_call_conf_onhide,
36         .onShow = __vcui_view_multi_call_conf_onshow,
37         .onDestroy = __vcui_view_multi_call_conf_ondestroy,
38         .priv = NULL,
39 };
40
41 voice_call_view_data_t *_vcui_view_multi_call_conf_new(vcui_app_call_data_t *ad)
42 {
43         s_view.app_data = ad;
44         s_view.priv = calloc(1, sizeof(vcui_view_multi_call_conf_priv_t));
45
46         if (!s_view.priv) {
47                 CALL_UI_DEBUG("ERROR!!!!!!!!!!! ");
48         }
49
50         return &s_view;
51 }
52
53 static void __vcui_view_multi_call_conf_draw_screen(Evas_Object *eo, void *data)
54 {
55         CALL_UI_DEBUG("..");
56
57         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
58         vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)vd->priv;
59         vcui_app_call_data_t *ad = vd->app_data;
60         char buf[DEF_BUF_LEN] = { 0, };
61         call_data_t *call_data = NULL;
62
63         priv->call_status = _vcui_doc_get_show_callstatus();
64         call_data = _vcui_doc_get_last_status(priv->call_status);
65         if (call_data == NULL) {
66                 CALL_UI_DEBUG("call data is null");
67                 return;
68         }
69         priv->total_members = _vcui_doc_get_count_hold()+_vcui_doc_get_count_unhold();
70
71                 /* call image */
72                 _vcui_show_wallpaper_image(priv->contents);
73                 priv->ic = _vcui_show_default_image(priv->contents, vd->app_data->win_main, CONF_ICON);
74                 if (priv->call_status == CALL_HOLD) {
75                         double scale_factor = 0.0;
76                         scale_factor = elm_config_scale_get();
77                         CALL_UI_DEBUG("scale_factor %f", scale_factor);
78
79                         if (scale_factor == 1.0) {
80                                 edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_HD", "CID_HD");
81                         } else {
82                                 edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_WVGA", "CID_WVGA");
83                         }
84                 } else {
85                         edje_object_signal_emit(_EDJ(priv->contents), "HIDE_DIM", "CID");
86                 }
87                 evas_object_smart_callback_add(priv->ic, "clicked", _vcui_conf_img_cb, vd);
88
89                 edje_object_part_text_set(_EDJ(eo), "txt_call_name", _("IDS_CALL_OPT_CONFERENCE_CALL"));
90                 snprintf(buf, DEF_BUF_LEN, "%d %s", priv->total_members, _("IDS_CALL_BODY_PEOPLE"));
91                 edje_object_part_text_set(_EDJ(eo), "txt_contact_phone_type", buf);             /* in case of multicallconf, it is num of people */
92
93                 _vcui_view_common_set_each_time(call_data->start_time);
94
95                 _vcui_create_top_left_button(vd);
96                 _vcui_create_top_right_button(vd);
97                 _vcui_create_bottom_left_button(vd);
98                 _vcui_create_bottom_middle_button(vd);
99                 if ((_vcui_is_phonelock_status() == EINA_TRUE)&&(_vcui_is_idle_lock() == EINA_TRUE)) {
100                         _vcui_create_top_middle_button_disabled(vd);
101                         _vcui_create_bottom_right_button_disabled(vd);
102                 } else {
103                         _vcui_create_top_middle_button(vd);
104                         _vcui_create_bottom_right_button(vd);
105                 }
106                 _vcui_create_button_bigend(vd);
107
108                 ad->beffect_needed = EINA_FALSE;
109
110         evas_object_show(eo);
111 }
112
113 static Evas_Object *__vcui_view_multi_call_conf_create_contents(void *data, char *group)
114 {
115         if (data == NULL) {
116                 CALL_UI_DEBUG("ERROR");
117                 return NULL;
118         }
119         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
120
121         Evas_Object *eo;
122
123         /* load edje */
124         eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, group);
125         if (eo == NULL)
126                 return NULL;
127
128         return eo;
129 }
130
131 static Evas_Object *__vcui_view_multi_call_conf_create_layout_main(Evas_Object *parent)
132 {
133         if (parent == NULL) {
134                 CALL_UI_DEBUG("ERROR");
135                 return NULL;
136         }
137
138         Evas_Object *ly;
139         ly = elm_layout_add(parent);
140         retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
141
142         elm_layout_theme_set(ly, "standard", "window", "integration");
143         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
144         elm_win_resize_object_add(parent, ly);
145
146         edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
147         edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
148         evas_object_show(ly);
149
150         return ly;
151 }
152
153 static int __vcui_view_multi_call_conf_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
154 {
155         voice_call_view_data_t *vd = view_data;
156         vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)vd->priv;
157
158         if (!vd->layout) {
159
160                 /* Create Main Layout */
161                 vd->layout = __vcui_view_multi_call_conf_create_layout_main(vd->app_data->win_main);
162                 if (vd->layout == NULL) {
163                         CALL_UI_DEBUG("ERROR");
164                         return VC_ERROR;
165                 }
166                 /* Create Contents */
167                 priv->contents = __vcui_view_multi_call_conf_create_contents(vd, GRP_MULTICALL_CONF);
168                 elm_object_part_content_set(vd->layout, "elm.swallow.content", priv->contents);
169
170                 evas_object_name_set(priv->contents, "MULTIVIEWCONF");
171                 CALL_UI_DEBUG("[========== MULTIVIEWCONF: priv->contents Addr : [%p] ==========]", priv->contents);
172         } else {
173                 CALL_UI_DEBUG("[UI]ad->layout_multicallconf==NULL case ");
174                 evas_object_show(vd->layout);
175         }
176
177         __vcui_view_multi_call_conf_onshow(view_data);
178         return VC_NO_ERROR;
179 }
180
181 static int __vcui_view_multi_call_conf_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
182 {
183         CALL_UI_DEBUG("multicall-conf view update");
184
185         __vcui_view_multi_call_conf_onshow(view_data);
186
187         return VC_NO_ERROR;
188 }
189
190 static int __vcui_view_multi_call_conf_onhide(voice_call_view_data_t *view_data)
191 {
192         CALL_UI_DEBUG("multicall-conf view hide");
193
194         evas_object_hide(view_data->layout);
195         return VC_NO_ERROR;
196 }
197
198 static int __vcui_view_multi_call_conf_onshow(voice_call_view_data_t *view_data)
199 {
200         CALL_UI_DEBUG("multicall-conf view show");
201
202         vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)view_data->priv;
203
204         __vcui_view_multi_call_conf_draw_screen(priv->contents, view_data);
205
206         evas_object_hide(view_data->layout);
207         evas_object_show(view_data->layout);
208         return VC_NO_ERROR;
209 }
210
211 static int __vcui_view_multi_call_conf_ondestroy(voice_call_view_data_t *view_data)
212 {
213         CALL_UI_DEBUG("multicall-conf view destroy");
214         vcui_app_call_data_t *ad = _vcui_get_app_data();
215
216         voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_CONF_VIEW];
217         vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)vd->priv;
218
219         if (priv != NULL) {
220                 if (priv->contents) {
221                         evas_object_del(priv->contents);
222                         priv->contents = NULL;
223                 }
224
225                 free(priv);
226                 priv = NULL;
227         }
228
229         if (vd->layout != NULL) {
230                 evas_object_hide(vd->layout);
231                 evas_object_del(vd->layout);
232                 vd->layout = NULL;
233         }
234
235         ad->view_st[VIEW_INCALL_MULTICALL_CONF_VIEW] = NULL;
236
237         _vcui_cache_flush();
238         CALL_UI_DEBUG("complete destroy multi view conf");
239
240         return VC_NO_ERROR;
241 }