2 * Copyright 2012 Samsung Electronics Co., Ltd
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
8 * http://www.tizenopensource.org/license
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.
18 #include "vcui-application.h"
19 #include "vcui-view-incoming-lock.h"
21 #define ACCEPT_DIFF_VALUE (130)
22 #define ACCEPT_DIFF_VALUE_MAX (182)
24 #define REJECT_DIFF_VALUE (-130)
25 #define REJECT_DIFF_VALUE_MAX (-182)
27 static int __vcui_view_incoming_lock_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
28 static int __vcui_view_incoming_lock_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
29 static int __vcui_view_incoming_lock_onhide(voice_call_view_data_t *view_data);
30 static int __vcui_view_incoming_lock_onshow(voice_call_view_data_t *view_data);
31 static int __vcui_view_incoming_lock_ondestroy(voice_call_view_data_t *view_data);
33 static voice_call_view_data_t s_view = {
34 .type = VIEW_INCOMING_LOCK_VIEW,
37 .onCreate = __vcui_view_incoming_lock_oncreate,
38 .onUpdate = __vcui_view_incoming_lock_onupdate,
39 .onHide = __vcui_view_incoming_lock_onhide,
40 .onShow = __vcui_view_incoming_lock_onshow,
41 .onDestroy = __vcui_view_incoming_lock_ondestroy,
45 voice_call_view_data_t *_vcui_view_incoming_lock_new(vcui_app_call_data_t *ad)
49 s_view.priv = calloc(1, sizeof(incoming_lock_view_priv_t));
52 CALL_UI_DEBUG("ERROR!!!!!!!!!!!");
58 static Evas_Object *__vcui_view_incoming_lock_load_edj(Evas *evas, char *edjname, const char *grpname)
62 edj = edje_object_add(evas);
63 if (!edje_object_file_set(edj, edjname, grpname)) {
64 CALL_UI_DEBUG("ERROR!!");
71 static void __vcui_view_incoming_lock_accept_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
73 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
74 incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv;
75 Evas_Event_Mouse_Move *ev = event_info;
77 priv->accept_start_x = ev->cur.canvas.x;
80 static void __vcui_view_incoming_lock_accept_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
82 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
83 incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv;
84 vcui_app_call_data_t *ad = vd->app_data;
85 Evas_Event_Mouse_Move *ev = event_info;
89 priv->accept_cur_x = ev->cur.canvas.x;
90 diff_x = priv->accept_cur_x - priv->accept_start_x;
94 if (diff_x < (ACCEPT_DIFF_VALUE * ad->scale_factor)) {
95 evas_object_move(priv->lock_accept, diff_x, 0);
97 edje_object_signal_emit(priv->lock_reject, "lock_reject,default", "prog");
98 } else if (diff_x < (ACCEPT_DIFF_VALUE_MAX * ad->scale_factor)) {
99 evas_object_move(priv->lock_accept, diff_x, 0);
100 evas_object_move(priv->lock_reject, (diff_x - (ACCEPT_DIFF_VALUE * ad->scale_factor)), 0);
102 edje_object_signal_emit(priv->lock_reject, "lock_reject,default", "prog");
104 evas_object_move(priv->lock_accept, (ACCEPT_DIFF_VALUE_MAX * ad->scale_factor), 0);
105 evas_object_move(priv->lock_reject, ((ACCEPT_DIFF_VALUE_MAX * ad->scale_factor) - (ACCEPT_DIFF_VALUE * ad->scale_factor)), 0);
107 edje_object_signal_emit(priv->lock_reject, "lock_reject,alpha", "prog");
112 static void __vcui_view_incoming_lock_accept_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
114 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
115 incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv;
116 vcui_app_call_data_t *ad = vd->app_data;
118 int diff_x = priv->accept_cur_x - priv->accept_start_x;
120 if (diff_x >= (ACCEPT_DIFF_VALUE_MAX * ad->scale_factor)) {
121 if(_vcui_is_phonelock_status() == EINA_FALSE)
122 vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK);
123 _vcui_engine_answer_call();
125 evas_object_move(priv->lock_accept, 0, 0);
126 evas_object_move(priv->lock_reject, 0, 0);
131 static Evas_Object *__vcui_view_incoming_lock_create_button_accept(void *data)
133 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
134 incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv;
135 vcui_app_call_data_t *ad = vd->app_data;
137 if(priv->lock_accept != NULL) {
138 evas_object_del(priv->lock_accept);
139 priv->lock_accept = NULL;
141 priv->lock_accept = __vcui_view_incoming_lock_load_edj(evas_object_evas_get(ad->win_main), EDJ_NAME, GRP_LOCK_ACCEPT);
142 evas_object_resize(priv->lock_accept, ad->root_w, ad->root_h);
144 evas_object_event_callback_add(priv->lock_accept, EVAS_CALLBACK_MOUSE_DOWN, __vcui_view_incoming_lock_accept_mouse_down_cb, vd);
145 evas_object_event_callback_add(priv->lock_accept, EVAS_CALLBACK_MOUSE_MOVE, __vcui_view_incoming_lock_accept_mouse_move_cb, vd);
146 evas_object_event_callback_add(priv->lock_accept, EVAS_CALLBACK_MOUSE_UP, __vcui_view_incoming_lock_accept_mouse_up_cb, vd);
148 edje_object_part_text_set(priv->lock_accept, "accept_text", _("IDS_CALL_BUTTON_ACCEPT"));
150 evas_object_show(priv->lock_accept);
152 return priv->lock_accept;
155 static void __vcui_view_incoming_lock_reject_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
157 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
158 incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv;
159 Evas_Event_Mouse_Move *ev = event_info;
161 priv->reject_start_x = ev->cur.canvas.x;
164 static void __vcui_view_incoming_lock_reject_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
166 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
167 incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv;
168 vcui_app_call_data_t *ad = vd->app_data;
169 Evas_Event_Mouse_Move *ev = event_info;
173 priv->reject_cur_x = ev->cur.canvas.x;
174 diff_x = priv->reject_cur_x - priv->reject_start_x;
177 if (diff_x > (REJECT_DIFF_VALUE * ad->scale_factor)) {
178 evas_object_move(priv->lock_reject, diff_x, 0);
180 edje_object_signal_emit(priv->lock_accept, "lock_accept,default", "prog");
181 } else if (diff_x > (REJECT_DIFF_VALUE_MAX * ad->scale_factor)) {
182 evas_object_move(priv->lock_reject, diff_x, 0);
183 evas_object_move(priv->lock_accept, (diff_x - (REJECT_DIFF_VALUE * ad->scale_factor)), 0);
185 edje_object_signal_emit(priv->lock_accept, "lock_accept,default", "prog");
187 evas_object_move(priv->lock_reject, (REJECT_DIFF_VALUE_MAX * ad->scale_factor), 0);
188 evas_object_move(priv->lock_accept, ((REJECT_DIFF_VALUE_MAX * ad->scale_factor) - (REJECT_DIFF_VALUE * ad->scale_factor)), 0);
190 edje_object_signal_emit(priv->lock_accept, "lock_accept,alpha", "prog");
196 static void __vcui_view_incoming_lock_reject_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
198 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
199 incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv;
200 vcui_app_call_data_t *ad = vd->app_data;
202 int diff_x = priv->reject_cur_x - priv->reject_start_x;
204 if (diff_x <= (REJECT_DIFF_VALUE_MAX * ad->scale_factor)) {
205 /* vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK);*/
206 _vcui_engine_reject_call();
208 evas_object_move(priv->lock_reject, 0, 0);
209 evas_object_move(priv->lock_accept, 0, 0);
214 static Evas_Object *__vcui_view_incoming_lock_create_button_reject(void *data)
216 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
217 incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv;
218 vcui_app_call_data_t *ad = vd->app_data;
220 if(priv->lock_reject != NULL) {
221 evas_object_del(priv->lock_reject);
222 priv->lock_reject = NULL;
224 priv->lock_reject = __vcui_view_incoming_lock_load_edj(evas_object_evas_get(ad->win_main), EDJ_NAME, GRP_LOCK_REJECT);
225 evas_object_resize(priv->lock_reject, ad->root_w, ad->root_h);
227 evas_object_event_callback_add(priv->lock_reject, EVAS_CALLBACK_MOUSE_DOWN, __vcui_view_incoming_lock_reject_mouse_down_cb, vd);
228 evas_object_event_callback_add(priv->lock_reject, EVAS_CALLBACK_MOUSE_MOVE, __vcui_view_incoming_lock_reject_mouse_move_cb, vd);
229 evas_object_event_callback_add(priv->lock_reject, EVAS_CALLBACK_MOUSE_UP, __vcui_view_incoming_lock_reject_mouse_up_cb, vd);
231 edje_object_part_text_set(priv->lock_reject, "reject_text", _("IDS_CALL_BUTTON_REJECT"));
233 evas_object_show(priv->lock_reject);
235 return priv->lock_reject;
238 static void __vcui_view_incoming_lock_draw_screen(voice_call_view_data_t *vd)
242 incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv;
243 Evas_Object *eo = priv->contents;
244 vcui_app_call_data_t *ad = vd->app_data;
246 priv->now_data = _vcui_doc_get_recent_mt();
247 if (priv->now_data == NULL) {
248 CALL_UI_DEBUG("call data is null");
251 if (priv->now_data->mo_mt_status != CALL_INCOMING) {
252 CALL_UI_DEBUG("it is not call_incoming.");
257 if (strcmp((char *)priv->now_data->call_file_path, NOIMG_ICON) == 0) {
258 _vcui_show_wallpaper_image(priv->contents);
260 CALL_UI_DEBUG("there is caller image.");
261 _vcui_show_wallpaper_image(priv->contents);
262 priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, priv->now_data->call_file_path);
265 /* call name (if nothing, call number) */
266 if (strlen((char *)priv->now_data->call_display) == 0) {
267 edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_num);
269 edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_display);
270 edje_object_part_text_set(_EDJ(eo), "txt_contact_phone_type", (char *)priv->now_data->call_num);
273 __vcui_view_incoming_lock_create_button_accept(vd);
274 __vcui_view_incoming_lock_create_button_reject(vd);
276 ad->beffect_needed = EINA_TRUE;
278 evas_object_show(eo);
282 static Evas_Object *__vcui_view_incoming_lock_create_contents(void *data)
285 CALL_UI_DEBUG("ERROR");
288 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
292 eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, GRP_MTLOCK);
299 static Evas_Object *__vcui_view_incoming_lock_create_layout_main(Evas_Object *parent)
301 if (parent == NULL) {
302 CALL_UI_DEBUG("ERROR");
307 ly = elm_layout_add(parent);
308 retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
310 elm_layout_theme_set(ly, "standard", "window", "integration");
311 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
312 elm_win_resize_object_add(parent, ly);
314 edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
315 edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
316 evas_object_show(ly);
321 static int __vcui_view_incoming_lock_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
323 CALL_UI_DEBUG("mt-lock view create!!");
325 vcui_app_call_data_t *ad = view_data->app_data;
326 incoming_lock_view_priv_t *priv = view_data->priv;
328 if (!view_data->layout) {
329 view_data->layout = __vcui_view_incoming_lock_create_layout_main(ad->win_main);
330 if (view_data->layout == NULL) {
331 CALL_UI_DEBUG("ERROR");
334 priv->contents = __vcui_view_incoming_lock_create_contents(view_data);
335 elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents);
337 evas_object_name_set(priv->contents, "INCOMINGLOCKVIEW");
338 CALL_UI_DEBUG("[========== INCOMINGLOCKVIEW: priv->contents Addr : [%p] ==========]", priv->contents);
342 __vcui_view_incoming_lock_onshow(view_data);
346 static int __vcui_view_incoming_lock_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
348 CALL_UI_DEBUG("mt-lock view update!!");
350 __vcui_view_incoming_lock_onshow(view_data);
354 static int __vcui_view_incoming_lock_onhide(voice_call_view_data_t *view_data)
356 CALL_UI_DEBUG("mt-lock view hide!!");
358 evas_object_hide(view_data->layout);
362 static int __vcui_view_incoming_lock_onshow(voice_call_view_data_t *view_data)
364 CALL_UI_DEBUG("mt-lock view show!!");
365 vcui_app_call_data_t *ad = _vcui_get_app_data();
368 __vcui_view_incoming_lock_draw_screen(view_data);
370 evas_object_hide(view_data->layout);
371 evas_object_show(view_data->layout);
372 _vcui_app_win_set_noti_type(EINA_TRUE);
377 static int __vcui_view_incoming_lock_ondestroy(voice_call_view_data_t *view_data)
379 CALL_UI_DEBUG("mt-lock view destroy!!");
381 vcui_app_call_data_t *ad = _vcui_get_app_data();
383 voice_call_view_data_t *vd = ad->view_st[VIEW_INCOMING_LOCK_VIEW];
384 incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv;
386 if (_vcui_is_idle_lock() == CALL_LOCK)
387 _vcui_app_win_set_noti_type(EINA_TRUE);
389 _vcui_app_win_set_noti_type(EINA_FALSE);
391 ad->bmute_ringtone = EINA_FALSE;
393 if (priv->lock_accept) {
394 evas_object_del(priv->lock_accept);
395 priv->lock_accept = NULL;
397 if (priv->lock_reject) {
398 evas_object_del(priv->lock_reject);
399 priv->lock_reject = NULL;
401 if (priv->contents) {
402 evas_object_del(priv->contents);
403 priv->contents = NULL;
410 if (vd->layout != NULL) {
411 evas_object_hide(vd->layout);
412 evas_object_del(vd->layout);
416 ad->view_st[VIEW_INCOMING_LOCK_VIEW] = NULL;