Change Internal API to public API
[apps/native/ug-mobile-ap.git] / src / mh_popup.c
1 /*
2 * ug-mobile-ap
3 *
4 * Copyright 2012  Samsung Electronics Co., Ltd
5
6 * Licensed under the Flora License, Version 1.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9
10 * http://www.tizenopensource.org/license
11
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 */
19
20 #include <efl_extension.h>
21 #include <app_control_internal.h>
22
23 #include "mh_common_utility.h"
24 #include "mobile_hotspot.h"
25 #include "mh_popup.h"
26 #include "mh_string.h"
27
28 static mh_popup_type_e popup_type = MH_POPUP_NONE;
29 static Evas_Object *popup_content = NULL;
30 static char *popup_string = NULL;
31
32 static void __handle_one_btn(void *data)
33 {
34         __MOBILE_AP_FUNC_ENTER__;
35
36         if (data == NULL) {
37                 ERR("The param is NULL\n");
38                 return;
39         }
40
41         mh_appdata_t *ad = (mh_appdata_t *)data;
42
43         if (ad->popup) {
44                 evas_object_del(ad->popup);
45                 ad->popup = NULL;
46         }
47         __MOBILE_AP_FUNC_EXIT__;
48 }
49
50 static void __popup_one_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
51 {
52         if (data == NULL || obj == NULL) {
53                 ERR("The param is NULL\n");
54                 return;
55         }
56
57         __handle_one_btn(data);
58 }
59
60 static void __popup_one_btn_mouse_event_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
61 {
62         if (data == NULL || obj == NULL) {
63                 ERR("The param is NULL\n");
64                 return;
65         }
66
67         Evas_Event_Mouse_Up *ev = event_info;
68
69         if (ev->button == 3) {
70                 __handle_one_btn(data);
71         }
72 }
73
74 static void __launch_network_app(void)
75 {
76         int ret = APP_CONTROL_ERROR_NONE;
77         app_control_h app_control;
78
79         app_control_create(&app_control);
80         if(ret != APP_CONTROL_ERROR_NONE) {
81                 ERR("app_control_create failed");
82                 return;
83         }
84         app_control_set_operation(app_control, APP_CONTROL_OPERATION_DEFAULT);
85         app_control_set_launch_mode(app_control, APP_CONTROL_LAUNCH_MODE_GROUP);
86         app_control_set_app_id(app_control, "setting-network-efl");
87
88         ret = app_control_send_launch_request(app_control, NULL, NULL);
89         if(ret == APP_CONTROL_ERROR_NONE) {
90                 DBG("Launch network ug successful");
91         } else {
92                 ERR("Fail to launch network ug");
93         }
94
95         app_control_destroy(app_control);
96 }
97
98 static void __handle_popup_resp(void *data, bool response)
99 {
100         __MOBILE_AP_FUNC_ENTER__;
101
102         if (data == NULL) {
103                 ERR("The param is NULL\n");
104                 return;
105         }
106
107         mh_appdata_t *ad = (mh_appdata_t *)data;
108         int ret = 0;
109         Eina_Bool state = 0;
110
111         if (ad->popup_checkbox) {
112                 state = elm_check_state_get(ad->popup_checkbox);
113                 evas_object_del(ad->popup_checkbox);
114                 ad->popup_checkbox = NULL;
115                 DBG("Checkbox status is = %d\n", state);
116         }
117         if (ad->popup) {
118                 evas_object_del(ad->popup);
119                 ad->popup = NULL;
120         }
121
122         if (response == true) {
123                 switch (popup_type) {
124                 case MH_POPUP_WIFI_ON_CHECKBOX:
125                         if(state) {
126                                 _set_checkbox_status(TETHERING_TYPE_WIFI, 1);
127                         }
128                         ad->is_wifi_teth_enabling = false;
129                         ret = tethering_enable(ad->handle, TETHERING_TYPE_WIFI);
130                         if (ret != TETHERING_ERROR_NONE) {
131                                 ERR("wifi tethering on is failed : %d\n", ret);
132                                 _update_wifi_item(ad, MH_STATE_NONE);
133                         }
134                         _wifi_tethering_checkbox_popup_status_set(false);
135                         _send_signal_qp(QP_SIGNAL_PROGRESS_ON);
136                         break;
137
138                 case MH_POPUP_BT_ON_CHECKBOX:
139                         if(state) {
140                                 _set_checkbox_status(TETHERING_TYPE_BT, 1);
141                         }
142                         ad->is_bt_teth_enabling = false;
143                         ret = tethering_enable(ad->handle, TETHERING_TYPE_BT);
144                         if (ret != TETHERING_ERROR_NONE) {
145                                 ERR("Error enable bt tethering : %d\n", ret);
146                                 _update_bt_item(ad, MH_STATE_NONE);
147                         }
148                         break;
149
150                 case MH_POPUP_USB_ON_CHECKBOX:
151                         if(state) {
152                                 _set_checkbox_status(TETHERING_TYPE_USB, 1);
153                         }
154                         if (_get_vconf_usb_state() != VCONFKEY_SYSMAN_USB_AVAILABLE) {
155                                 _update_tethering_item(ad, MH_STATE_NONE);
156                                 break;
157                         }
158                         ad->is_usb_teth_enabling = false;
159                         ret = tethering_enable(ad->handle, TETHERING_TYPE_USB);
160                         if (ret != TETHERING_ERROR_NONE) {
161                                 ERR("Error enable usb tethering : %d\n", ret);
162                                 _update_usb_item(ad, MH_STATE_NONE);
163                         }
164                         break;
165
166                 case MH_POPUP_WIFI_AP_OFF:
167                         ret = tethering_disable(ad->handle, TETHERING_TYPE_RESERVED);
168                         if (ret != TETHERING_ERROR_NONE) {
169                                 ERR("MobileAP off is failed : %d\n", ret);
170                         }
171                         break;
172
173                 case MH_POPUP_WIFI_OFF:
174                         ret = tethering_disable(ad->handle, TETHERING_TYPE_WIFI);
175                         if (ret != TETHERING_ERROR_NONE) {
176                                 ERR("wifi tethering off is failed : %d\n", ret);
177                                 _update_wifi_item(ad, MH_STATE_NONE);
178                         }
179                         _send_signal_qp(QP_SIGNAL_PROGRESS_OFF);
180                         break;
181
182                 case MH_POPUP_MOBILE_DATA_OFF:
183                         __launch_network_app();
184                         _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
185                         break;
186
187                 default:
188                         ERR("Unknown popup_type : %d\n", popup_type);
189                         break;
190                 }
191         } else {
192                 switch (popup_type) {
193                 case MH_POPUP_WIFI_ON_CHECKBOX:
194                         _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
195                         _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
196                         _wifi_tethering_checkbox_popup_status_set(false);
197                         break;
198
199                 case MH_POPUP_BT_ON_CHECKBOX:
200                         _update_tethering_enabling_item(ad, TETHERING_TYPE_BT, MH_STATE_NONE);
201                         break;
202
203                 case MH_POPUP_USB_ON_CHECKBOX:
204                         _update_tethering_enabling_item(ad,TETHERING_TYPE_USB, MH_STATE_NONE);
205                         break;
206
207                 case MH_POPUP_WIFI_AP_OFF:
208                         if (ad->setup.genlist)
209                                 elm_naviframe_item_pop(ad->naviframe);
210                         elm_naviframe_item_pop(ad->naviframe);
211                         break;
212
213                 case MH_POPUP_WIFI_OFF:
214                         _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
215                         _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
216                         break;
217
218                 case MH_POPUP_MOBILE_DATA_OFF:
219                         _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
220                         break;
221                 default:
222                         ERR("Unknown popup_type : %d\n", popup_type);
223                         break;
224                 }
225         }
226
227         __MOBILE_AP_FUNC_EXIT__;
228 }
229
230 void _teth_on(mh_appdata_t *ad)
231 {
232         __handle_popup_resp(ad, true);
233 }
234
235 static void __popup_yes_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
236 {
237         if (data == NULL || obj == NULL) {
238                 ERR("The param is NULL\n");
239                 return;
240         }
241
242         __handle_popup_resp(data, true);
243 }
244
245 static void __popup_no_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
246 {
247         if (data == NULL || obj == NULL) {
248                 ERR("The param is NULL\n");
249                 return;
250         }
251
252         __handle_popup_resp(data, false);
253 }
254
255 static void __popup_no_btn_mouse_event_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
256 {
257         if (data == NULL || obj == NULL) {
258                 ERR("The param is NULL\n");
259                 return;
260         }
261
262         Evas_Event_Mouse_Up *ev = event_info;
263
264         if (ev->button == 3) {
265                 __handle_popup_resp(data, false);
266         }
267 }
268
269 static void __popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
270 {
271         if (obj == NULL) {
272                 ERR("The param is NULL\n");
273                 return;
274         }
275
276         elm_popup_dismiss(obj);
277 }
278
279 static void __popup_hide_finished_cb(void *data, Evas_Object *obj, void *event_info)
280 {
281         if (data == NULL) {
282                 ERR("The param is NULL\n");
283                 return;
284         }
285
286         __handle_popup_resp(data, false);
287 }
288
289 void _prepare_popup_with_content(int type, Evas_Object *obj)
290 {
291         __MOBILE_AP_FUNC_ENTER__;
292
293         if (obj == NULL) {
294                 ERR("param is NULL\n");
295                 return;
296         }
297
298         popup_type = type;
299
300         if (popup_content)
301                 evas_object_del(popup_content);
302         popup_content = obj;
303
304         if (popup_string) {
305                 free(popup_string);
306                 popup_string = NULL;
307         }
308
309         __MOBILE_AP_FUNC_EXIT__;
310 }
311
312 void _prepare_popup(int type, const char *str)
313 {
314         __MOBILE_AP_FUNC_ENTER__;
315
316         if (str == NULL) {
317                 ERR("param is NULL\n");
318                 return;
319         }
320         popup_type = type;
321
322         popup_content = NULL;
323
324         if (popup_string)
325                 free(popup_string);
326
327         popup_string = strndup(str, MH_LABEL_LENGTH_MAX);
328         if (popup_string == NULL)
329                 ERR("strndup is failed\n");
330
331         __MOBILE_AP_FUNC_EXIT__;
332 }
333
334 void _prepare_popup_type(int type)
335 {
336         popup_type = type;
337 }
338
339 static void __language_changed_cb(void *data, Evas_Object *obj, void *event_info)
340 {
341         __MOBILE_AP_FUNC_ENTER__;
342
343         mh_appdata_t *ad = (mh_appdata_t *)data;
344         Evas_Object *label = NULL;
345         bool wifi_state = false;
346         char *fmt = NULL;
347         char str[MH_LABEL_LENGTH_MAX];
348
349         if (ad->type < TETHERING_TYPE_USB || ad->type > TETHERING_TYPE_BT ) {
350                 ERR("Invalid Tethering type\n");
351                 return;
352         }
353
354         switch(ad->type) {
355         case TETHERING_TYPE_WIFI:
356                 wifi_is_activated(&wifi_state);
357                 _set_vconf_prev_wifi_state(wifi_state);
358                 if (wifi_state == true || _is_wifi_direct_on() == true) {
359                         fmt = STR_TETH_ON_DESC_1;
360                 } else {
361                         fmt = STR_TETH_ON_DESC_2;
362                 }
363                 snprintf(str, MH_LABEL_LENGTH_MAX, fmt, TETHERING_WIFI_MAX_CONNECTED_STA);
364                 break;
365
366         case TETHERING_TYPE_BT:
367                 snprintf(str, MH_LABEL_LENGTH_MAX, STR_TETH_ON_DESC_2, TETHERING_BT_MAX_CONNECTED_STA);
368                 break;
369
370         case TETHERING_TYPE_USB:
371                 snprintf(str, MH_LABEL_LENGTH_MAX, STR_TETH_ON_DESC_3);
372                 break;
373         default:
374                 break;
375         }
376
377         label = elm_label_add(ad->main.check_popup_ly);
378         elm_object_style_set(label, "popup/default");
379         elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
380         elm_object_text_set(label, str);
381         evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
382         evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
383         evas_object_show(label);
384         elm_object_part_content_set(ad->main.check_popup_ly, "elm.swallow.content", label);
385
386         __MOBILE_AP_FUNC_EXIT__;
387 }
388
389 static void __popup_with_checkbox(mh_appdata_t *ad)
390 {
391         __MOBILE_AP_FUNC_ENTER__;
392
393         Evas_Object *popup = NULL;
394         Evas_Object *yes_button = NULL;
395         Evas_Object *cancel_button = NULL;
396         Evas_Object *layout = NULL;
397         Evas_Object *label = NULL;
398         Evas_Object *check = NULL;
399
400         popup = elm_popup_add(ad->win);
401         elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
402         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
403         ad->popup = popup;
404         switch (ad->type) {
405         case TETHERING_TYPE_WIFI:
406                 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
407                                 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
408                 break;
409         case TETHERING_TYPE_BT:
410                 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
411                                 "IDS_MOBILEAP_BODY_BLUETOOTH_TETHERING");
412                 break;
413         case TETHERING_TYPE_USB:
414                 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
415                                 "IDS_MOBILEAP_MBODY_USB_TETHERING");
416                 break;
417         default:
418                 break;
419         }
420
421         /* layout */
422         layout = elm_layout_add(popup);
423         elm_layout_file_set(layout, FILE_PATH_OF_EDC, "popup_checkview_layout");
424         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
425         evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 1.0);
426         ad->main.check_popup_ly = layout;
427
428         /* check */
429         check = elm_check_add(popup);
430         elm_object_style_set(check, "popup");
431         elm_object_domain_translatable_text_set(check, PACKAGE, STR_NO_SHOW_AGAIN);
432         evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
433         evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
434         elm_object_part_content_set(layout, "elm.swallow.end", check);
435         ad->popup_checkbox = check;
436
437         /* label */
438         label = elm_label_add(layout);
439         elm_object_style_set(label, "popup/default");
440         elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
441         elm_object_text_set(label, popup_string);
442         evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
443         evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
444         evas_object_show(label);
445         elm_object_part_content_set(layout, "elm.swallow.content", label);
446
447         cancel_button = _create_button(popup,  "IDS_BR_SK_CANCEL",
448                                 "button1", __popup_no_btn_clicked_cb, ad);
449         yes_button = _create_button(popup, "IDS_ST_BUTTON_ENABLE_M_USE",
450                                 "button2", __popup_yes_btn_clicked_cb, ad);
451
452         evas_object_smart_callback_add(popup, "language,changed", __language_changed_cb, ad);
453
454         eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
455                         __popup_no_btn_clicked_cb, (void *)ad);
456
457         evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
458                         __popup_no_btn_mouse_event_cb, (void *)ad);
459         evas_object_smart_callback_add(popup, "block,clicked",
460                         __popup_block_clicked_cb, NULL);
461         evas_object_smart_callback_add(popup, "dismissed",
462                         __popup_hide_finished_cb, ad);
463
464
465         if (check && yes_button) {
466                 elm_object_focus_next_object_set(check, yes_button, ELM_FOCUS_PREVIOUS);
467                 elm_object_focus_next_object_set(yes_button, check, ELM_FOCUS_NEXT);
468                 if (cancel_button) {
469                         elm_object_focus_next_object_set(cancel_button, check, ELM_FOCUS_PREVIOUS);
470                         elm_object_focus_next_object_set(check ,cancel_button, ELM_FOCUS_NEXT);
471                 }
472         }
473
474         elm_object_content_set(popup, layout);
475         evas_object_show(popup);
476         ad->popup = popup;
477
478         __MOBILE_AP_FUNC_EXIT__;
479 }
480
481 Eina_Bool _create_popup(mh_appdata_t *ad)
482 {
483         __MOBILE_AP_FUNC_ENTER__;
484
485         Evas_Object *popup = NULL;
486         Evas_Object *cancel_button = NULL;
487         Evas_Object *yes_button = NULL;
488         Evas_Object *label = NULL;
489
490         if (ad == NULL) {
491                 ERR("The param is NULL\n");
492                 if (popup_string) {
493                         free(popup_string);
494                         popup_string = NULL;
495                 }
496                 popup_content = NULL;
497
498                 return EINA_FALSE;
499         }
500
501         if (ad->popup != NULL) {
502                 evas_object_del(ad->popup);
503                 ad->popup = NULL;
504         }
505         ad->popup_checkbox = NULL;
506         DBG("popup type : %d", popup_type);
507
508         switch (popup_type) {
509         case MH_POPUP_WIFI_ON_CHECKBOX:
510         case MH_POPUP_BT_ON_CHECKBOX:
511         case MH_POPUP_USB_ON_CHECKBOX:
512                 __popup_with_checkbox(ad);
513                 break;
514
515         case MH_POPUP_WIFI_OFF:
516                 popup = elm_popup_add(ad->win);
517                 ad->popup = popup;
518
519                 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
520                                 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
521
522                 evas_object_size_hint_weight_set(popup,
523                                 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
524
525                 if (popup_content == NULL)
526                         elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
527                 else
528                         elm_object_content_set(popup, popup_content);
529
530                 cancel_button =_create_button(popup, STR_CANCEL,
531                                 "button1", __popup_no_btn_clicked_cb, ad);
532                 yes_button = _create_button(popup, STR_TURN_OFF,
533                                 "button2", __popup_yes_btn_clicked_cb, ad);
534
535                 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
536                                 __popup_no_btn_clicked_cb, (void *)ad);
537                 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
538                                 __popup_no_btn_mouse_event_cb, (void *)ad);
539                 evas_object_smart_callback_add(popup, "block,clicked",
540                                 __popup_block_clicked_cb, NULL);
541                 evas_object_smart_callback_add(popup, "dismissed",
542                                 __popup_hide_finished_cb, ad);
543
544                 evas_object_show(popup);
545                 break;
546
547         case MH_POPUP_TETH_ENABLING_FAILED:
548         case MH_POPUP_NO_SIM:
549         case MH_POPUP_FLIGHT_MODE:
550         case MH_POPUP_NETWORK_OUT_OF_RANGE:
551                 popup = elm_popup_add(ad->win);
552                 ad->popup = popup;
553                 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
554                                 EVAS_HINT_EXPAND);
555
556                 if (popup_content == NULL)
557                         elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
558                 else
559                         elm_object_content_set(popup, popup_content);
560                 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
561                                 STR_NO_NET_CONN);
562                 cancel_button = _create_button(popup,  STR_CANCEL,
563                                 "button1", __popup_no_btn_clicked_cb, ad);
564
565                 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
566                                 __popup_no_btn_clicked_cb, (void *)ad);
567                 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
568                                 __popup_no_btn_mouse_event_cb, (void *)ad);
569                 evas_object_smart_callback_add(popup, "block,clicked",
570                                 __popup_block_clicked_cb, NULL);
571                 evas_object_smart_callback_add(popup, "dismissed",
572                                 __popup_hide_finished_cb, ad);
573
574                 evas_object_show(popup);
575                 break;
576
577         case MH_POPUP_MOBILE_DATA_OFF:
578                 popup = elm_popup_add(ad->win);
579                 ad->popup = popup;
580                 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
581                                 EVAS_HINT_EXPAND);
582
583                 if (popup_content == NULL)
584                         elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
585                 else
586                         elm_object_content_set(popup, popup_content);
587                 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
588                                 STR_NO_NET_CONN);
589                 cancel_button = _create_button(popup,  STR_CANCEL,
590                                 "button1", __popup_no_btn_clicked_cb, ad);
591                 yes_button = _create_button(popup, STR_SETTING,
592                                 "button2", __popup_yes_btn_clicked_cb, ad);
593
594                 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
595                                 __popup_no_btn_clicked_cb, (void *)ad);
596                 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
597                                 __popup_no_btn_mouse_event_cb, (void *)ad);
598                 evas_object_smart_callback_add(popup, "block,clicked",
599                                 __popup_block_clicked_cb, NULL);
600                 evas_object_smart_callback_add(popup, "dismissed",
601                                 __popup_hide_finished_cb, ad);
602
603                 evas_object_show(popup);
604                 break;
605
606         case MH_POPUP_WIFI_AP_OFF:
607                 popup = elm_popup_add(ad->win);
608                 ad->popup = popup;
609                 evas_object_size_hint_weight_set(popup,
610                                 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
611
612                 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
613                                 STR_TETH);
614                 if (popup_content == NULL)
615                         elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
616                 else
617                         elm_object_content_set(popup, popup_content);
618
619                 cancel_button = _create_button(popup,  STR_CANCEL,
620                                 "button1", __popup_no_btn_clicked_cb, ad);
621                 yes_button = _create_button(popup, STR_ENABLE,
622                                 "button2", __popup_yes_btn_clicked_cb, ad);
623
624                 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
625                                 __popup_no_btn_clicked_cb, (void *)ad);
626                 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
627                                 __popup_no_btn_mouse_event_cb, (void *)ad);
628
629                 evas_object_show(popup);
630                 break;
631
632         default:
633                 ERR("Unknown popup_type : %d\n", popup_type);
634                 break;
635         }
636
637         if (cancel_button && yes_button) {
638                 elm_object_focus_next_object_set(cancel_button, yes_button, ELM_FOCUS_PREVIOUS);
639                 elm_object_focus_next_object_set(yes_button, cancel_button, ELM_FOCUS_NEXT);
640         }
641
642         if (popup_string) {
643                 free(popup_string);
644                 popup_string = NULL;
645         }
646         popup_content = NULL;
647
648         __MOBILE_AP_FUNC_EXIT__;
649
650         return EINA_TRUE;
651 }
652
653 void _destroy_popup(mh_appdata_t *ad)
654 {
655         __MOBILE_AP_FUNC_ENTER__;
656
657         if (ad == NULL) {
658                 ERR("ad is null\n");
659                 return;
660         }
661
662         if (ad->popup) {
663                 evas_object_del(ad->popup);
664                 ad->popup = NULL;
665         }
666         ad->popup_checkbox = NULL;
667
668         if (popup_string) {
669                 free(popup_string);
670                 popup_string = NULL;
671         }
672         popup_content = NULL;
673         popup_type = MH_POPUP_NONE;
674
675         __MOBILE_AP_FUNC_EXIT__;
676
677         return;
678 }