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