Tizen 2.0 Release
[apps/home/settings.git] / setting-network / src / setting-network-main.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Flora License, Version 1.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://floralicense.org/license/
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an AS IS BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 #include <setting-network-main.h>
18
19 #define MOBILE_DATA_WITHOUT_WIFI_STR                    "IDS_ST_BODY_MOBILE_DATA_WILL_BE_USED_IF_YOU_DOWNLOAD_OR_UPLOAD_DATA_WITHOUT_WI_FI_CONNECTION"
20 #define UMTS_MODE_WORK_OUTSIDE_STR                                      "IDS_ST_BODY_UMTS_MODE_ONLY_WORKS_INSIDE_3G_COVERAGE_AREA"
21 #define BAND_OPERATE_OUTSIDE_USA_CANADA_STR             "IDS_ST_BODY_THIS_BAND_MAY_NOT_WORK_OUTSIDE_THE_USA_AND_CANADA"
22
23 static int setting_network_main_create(void *cb);
24 static int setting_network_main_destroy(void *cb);
25 static int setting_network_main_update(void *cb);
26 static int setting_network_main_cleanup(void *cb);
27
28 setting_view setting_view_network_main = {
29         .create = setting_network_main_create,
30         .destroy = setting_network_main_destroy,
31         .update = setting_network_main_update,
32         .cleanup = setting_network_main_cleanup,
33 };
34
35 static void setting_network_main_item_Gendial_mouse_up_cb(void *data,
36                                                           Evas_Object *obj,
37                                                           void *event_info);
38 static void setting_network_main_click_softkey_help_cb(void *data,
39                                                        Evas_Object *obj,
40                                                        void *event_info);
41 static void setting_network_main_click_softkey_back_cb(void *data,
42                                                        Evas_Object *obj,
43                                                        void *event_info);
44 static void setting_network_main_chk_btn_cb(void *data, Evas_Object *obj,
45                                             void *event_info);
46 static void setting_network_use_packet_resp_cb(void *data, Evas_Object *obj,
47                                                void *event_info);
48 static void __setting_network_data_roaming_resp_cb(void *data, Evas_Object *obj,
49                                              void *event_info);
50
51
52 /* ***************************************************
53  *
54  *basic func
55  *
56  ***************************************************/
57 void __network_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
58 {
59         SETTING_TRACE_BEGIN;
60         /* error check */
61         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
62         ret_if(NULL == data);
63         SettingNetworkUG *ad = (SettingNetworkUG *) data;
64         Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
65         elm_genlist_item_selected_set(subitem, 0);
66         Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
67         SETTING_TRACE("data_subItem->chk_status:%d", data_subItem->chk_status);
68         SETTING_TRACE("elm_radio_value_get(ad->data_net_mode->rgd):%d", elm_radio_value_get(ad->data_net_mode->rgd));
69         if (data_subItem->chk_status == elm_radio_value_get(ad->data_net_mode->rgd))
70         {
71                 return;
72         }
73         elm_radio_value_set(ad->data_net_mode->rgd, data_subItem->chk_status);
74
75         ad->net_mode = data_subItem->chk_status;
76         int tapi_ret = tel_set_network_mode(ad->handle, data_subItem->chk_status, setting_tapi_set_band_cb, ad);
77         if (tapi_ret != TAPI_API_SUCCESS) {
78                 SETTING_TRACE_DEBUG
79                     ("%s*** [ERR] tel_set_network_mode. tapi_ret=%d ***%s",
80                      SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
81                 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(Invok_API_Failed_Desc), NULL, POPUP_INTERVAL, FALSE, FALSE);
82                 //rollback
83                 int err;
84                 setting_get_int_slp_key(ad->data_net_mode->int_slp_setting_binded,
85                                         &(ad->net_mode), &err);
86                 /** @todo check 'err' variable for exception handling */
87                 elm_radio_value_set(ad->data_net_mode->rgd, ad->net_mode);
88                 return;
89         }
90
91         //it will be deleted in callback set by tel_set_network_mode(that is setting_tapi_set_band_cb.)
92         ad->network_ug_pop = setting_create_popup_without_btn(ad, ad->win_get, NULL,
93                                          _("IDS_COM_POP_PROCESSING"), NULL,
94                                          0.0, TRUE, TRUE);
95 }
96
97
98 static void
99 __setting_network_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
100 {
101         ret_if(NULL == data || NULL == event_info);
102         SETTING_TRACE_BEGIN;
103         SettingNetworkUG *ad = (SettingNetworkUG *) data;
104         Elm_Object_Item *parentItem = event_info;       /* parent item */
105         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
106         Evas_Object *scroller = elm_object_item_widget_get(parentItem);
107
108         Evas_Object *rgd;
109         if (data_parentItem == ad->data_net_mode) {
110                 rgd = elm_radio_add(scroller);
111                 elm_radio_value_set(rgd, -1);
112
113                 setting_create_Gendial_exp_sub_field(scroller,
114                                                      &itc_1icon_1text_sub,
115                                                      __network_sub_list_sel_cb,
116                                                      ad, parentItem,
117                                                      SWALLOW_Type_1RADIO, rgd,
118                                                      TAPI_NETWORK_MODE_AUTO,
119                                                      Keystr_NetBrand_Auto, NULL);
120
121                 setting_create_Gendial_exp_sub_field(scroller,
122                                                      &itc_1icon_1text_sub,
123                                                      __network_sub_list_sel_cb,
124                                                      ad, parentItem,
125                                                      SWALLOW_Type_1RADIO, rgd,
126                                                      TAPI_NETWORK_MODE_GSM,
127                                                      Keystr_NetBrand_GSM, NULL);
128
129                 setting_create_Gendial_exp_sub_field(scroller,
130                                                      &itc_1icon_1text_sub,
131                                                      __network_sub_list_sel_cb,
132                                                      ad, parentItem,
133                                                      SWALLOW_Type_1RADIO, rgd,
134                                                      TAPI_NETWORK_MODE_WCDMA,
135                                                      Keystr_NetBrand_WCDMA, NULL);
136
137                 data_parentItem->rgd = rgd;
138                 setting_update_chk_status(rgd, data_parentItem->int_slp_setting_binded);
139
140         }
141 }
142
143 #define __switch_radio_state(cur_data, dst_state, dst_key) do { \
144         if (cur_data)\
145         {\
146                 old_status = cur_data->chk_status;\
147                 cur_data->chk_status = dst_state;\
148                 elm_radio_state_value_set(cur_data->eo_check, cur_data->chk_status);\
149                 if (sel_mode == old_status)\
150                 {\
151                         sel_item_data = cur_data;\
152                 }\
153                 \
154                 G_FREE(cur_data->keyStr);\
155                 cur_data->keyStr = g_strdup(dst_key);\
156                 elm_genlist_item_fields_update(cur_data->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);\
157         }\
158 } while (0);
159
160 static void __3g_change_cb(keynode_t *key, void *data)
161 {
162         SETTING_TRACE_BEGIN;
163         ret_if(NULL == data);
164         SettingNetworkUG *ad = data;
165         int status = vconf_keynode_get_bool(key);
166         char *vconf_name = vconf_keynode_get_name(key);
167         SETTING_TRACE("vconf_name:%s, status:%d", vconf_name, status);
168
169         if (!safeStrCmp(vconf_name, VCONFKEY_3G_ENABLE)) {
170                 if(ad->data_use_packet)
171                 {
172                         ad->data_use_packet->chk_status = status;
173                         elm_check_state_set(ad->data_use_packet->eo_check, ad->data_use_packet->chk_status);
174                 }
175         }
176 }
177 static void __data_roaming_change_cb(keynode_t *key, void *data)
178 {
179         SETTING_TRACE_BEGIN;
180         ret_if(NULL == data);
181         SettingNetworkUG *ad = data;
182         int status = vconf_keynode_get_bool(key);
183         char *vconf_name = vconf_keynode_get_name(key);
184         SETTING_TRACE("vconf_name:%s, status:%d", vconf_name, status);
185
186         if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_STATE_DATA_ROAMING_BOOL) && ad->data_roaming) {
187                 ad->data_roaming->chk_status = status;
188                 elm_check_state_set(ad->data_roaming->eo_check, ad->data_roaming->chk_status);
189                 if (status)
190                 {
191                         int value = 0;
192                         int err = 0;
193                         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &value, &err);
194                         setting_retm_if(err != 0, "get vconf failed");
195                         if (!value) {
196                                 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
197                                                          SETTING_ON_OFF_BTN_ON, &err);
198                         }
199                 }
200         }
201 }
202
203 static int setting_network_main_create(void *cb)
204 {
205         SETTING_TRACE_BEGIN;
206         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
207
208         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
209         /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
210         int value = 0;
211         int k = -1;
212         /*  ****END****  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
213
214         Evas_Object *scroller;
215
216         ad->ly_main =
217             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
218                                                    ad->win_get,
219                                                    _("IDS_ST_BODY_NETWORK"),
220                                                    dgettext("sys_string",
221                                                             "IDS_COM_BODY_BACK"),
222                                                    NULL,//_("IDS_COM_BODY_HELP"),
223                                                    setting_network_main_click_softkey_back_cb,
224                                                    setting_network_main_click_softkey_help_cb,
225                                                    ad, &scroller,
226                                                    &ad->navi_bar);
227
228         setting_enable_expandable_genlist(scroller, ad,
229                                           __setting_network_main_exp_cb, NULL);
230
231         Elm_Object_Item *item = NULL;;
232
233         item =
234             elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
235                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
236         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
237
238         int value_use_packet;
239         int err_use_packet;
240         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
241                                  &value_use_packet, &err_use_packet);
242         /** @todo check 'err_use_packet' variable for exception handling */
243         ad->data_use_packet =
244             setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
245                                              setting_network_main_item_Gendial_mouse_up_cb,
246                                              ad, SWALLOW_Type_1TOGGLE, NULL,
247                                              NULL, value_use_packet,
248                                              KeyStr_UsePacketData, NULL,
249                                              setting_network_main_chk_btn_cb);
250         if (ad->data_use_packet) {
251                 ad->data_use_packet->userdata = ad;
252         } else {
253                 SETTING_TRACE_ERROR("ad->data_use_packet is NULL");
254         }
255
256         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
257                                          ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
258                                          NULL, NULL, 0, Data_packet_Desc, NULL,
259                                          NULL);
260         elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
261                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
262
263         /* data roaming */
264         int value_data_roaming = 0;
265         int err_data_roaming = 0;
266         setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
267                                  &value_data_roaming, &err_data_roaming);
268         if (err_data_roaming != 0) {
269                 SETTING_TRACE_ERROR("get vconf failed");
270         }
271         ad->data_roaming = setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
272                                                             setting_network_main_item_Gendial_mouse_up_cb,
273                                                             ad, SWALLOW_Type_1TOGGLE, NULL,
274                                                             NULL, value_data_roaming,
275                                                             KeyStr_DataRoaming, NULL,
276                                                             setting_network_main_chk_btn_cb);
277         if (ad->data_roaming) {
278                 ad->data_roaming->userdata = ad;
279         } else {
280                 SETTING_TRACE_ERROR("ad->data_roaming is NULL");
281         }
282
283         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
284                                          ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
285                                          NULL, NULL, 0, SETTING_NETWORK_DATA_ROMING_DESC, NULL,
286                                          NULL);
287         elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
288                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
289
290
291         /* (void)setting_create_Gendial_field_titleItem(scroller, &(ad->itc_group_item), speciliztion, NULL); */
292
293         /*  Don't need to check flight mode,if flight mode is on, thw whole Network function will be disable*/
294         /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
295         ad->sel_net = TAPI_NETWORK_SELECTIONMODE_AUTOMATIC;
296         ad->sel_act = TAPI_NETWORK_SYSTEM_NO_SRV;
297         vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net);
298         vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act);
299
300         FREE(ad->sel_network);
301         //ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
302         ad->sel_network = get_pa_select_network();
303         SETTING_TRACE("pa_sel_net_name:%s", ad->sel_network);
304         if (isEmptyStr(ad->sel_network)) {
305             ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK)+1);
306         }
307         SETTING_TRACE("pa_net_name:%s", ad->sel_network);
308         SETTING_TRACE("old act:%d", ad->sel_act);
309         SETTING_TRACE("old network mode:%d", ad->sel_net);
310
311         char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
312         if (TAPI_NETWORK_SELECTIONMODE_MANUAL == value) {
313                 snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
314                          "%s, %s (%s)", _("IDS_COM_BODY_MANUAL"), _(ad->sel_network),
315                          setting_network_get_act_str(ad->sel_act));
316         }
317         else{
318                 snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
319                          "%s, %s", _("IDS_COM_BODY_AUTOMATIC"), _(ad->sel_network));
320         }
321
322         ad->data_sel_net = setting_create_Gendial_field_def(scroller,
323                                      &itc_2text_3,
324                                      setting_network_main_item_Gendial_mouse_up_cb,
325                                      ad, SWALLOW_Type_INVALID,
326                                      NULL, NULL, 0,
327                                      "IDS_ST_BODY_SELECT_NETWORK",
328                                      sel_network_desc, NULL);
329         if (ad->data_sel_net) {
330                 ad->data_sel_net->userdata = ad;
331         } else {
332                 SETTING_TRACE_ERROR("ad->data_sel_net is NULL");
333         }
334         /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
335         /* hide NETWORK MODE in Emulator*/
336         char *sub_des = NULL;
337         value = TAPI_NETWORK_MODE_AUTO;
338         k = vconf_get_int(VCONFKEY_SETAPPL_NETWORK_MODE_INT, &value);
339         if (-1 != k) {
340                 SETTING_TRACE("VCONFKEY_SETAPPL_NETWORK_MODE_INT value:%d", value);
341                 switch (value) {
342                 case TAPI_NETWORK_MODE_AUTO:
343                 case TAPI_NETWORK_MODE_LTE|TAPI_NETWORK_MODE_GSM|TAPI_NETWORK_MODE_WCDMA:
344                 {
345                         sub_des = _(Keystr_NetBrand_Auto);
346                         break;
347                 }
348
349                 case TAPI_NETWORK_MODE_GSM:
350                         sub_des = _(Keystr_NetBrand_GSM);
351                         break;
352                 case TAPI_NETWORK_MODE_WCDMA:
353                         sub_des = _(Keystr_NetBrand_WCDMA);
354                         break;
355                 case TAPI_NETWORK_MODE_LTE|TAPI_NETWORK_MODE_WCDMA:
356                         sub_des = _(Keystr_NetBrand_LTE_WCDMA);
357                         break;
358                 case TAPI_NETWORK_MODE_GSM|TAPI_NETWORK_MODE_WCDMA:
359                         sub_des = _(Keystr_NetBrand_Auto_WCDMA_GSM);
360                         break;
361                 default:
362                         break;
363                 }
364         }
365
366         ad->data_net_mode =
367             setting_create_Gendial_exp_parent_field(scroller,
368                                                     &itc_2text_3_parent,
369                                                     NULL, NULL,
370                                                     SWALLOW_Type_INVALID,
371                                                     "IDS_ST_BODY_NETWORK_MODE",
372                                                     sub_des);
373         if (ad->data_net_mode) {
374                 ad->data_net_mode->int_slp_setting_binded =
375                         INT_SLP_SETTING_NETWORK_MODE;
376                 ad->data_net_mode->userdata = ad;
377         } else {
378                 SETTING_TRACE_ERROR("ad->data_back is NULL");
379         }
380
381         setting_create_Gendial_field_def(scroller, &itc_1text,
382                                          setting_network_main_item_Gendial_mouse_up_cb,
383                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
384                                          0, CONNECTION_DSC,
385                                          NULL, NULL);
386
387         item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
388                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
389         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
390
391         vconf_notify_key_changed(VCONFKEY_3G_ENABLE, __3g_change_cb, ad);
392         vconf_notify_key_changed(VCONFKEY_SETAPPL_STATE_DATA_ROAMING_BOOL, __data_roaming_change_cb, ad);
393
394         setting_view_network_main.is_create = 1;
395         setting_view_update(&setting_view_network_main, ad);
396         return SETTING_RETURN_SUCCESS;
397 }
398
399 static int setting_network_main_destroy(void *cb)
400 {
401         /* error check */
402         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
403
404         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
405         vconf_ignore_key_changed(VCONFKEY_3G_ENABLE, __3g_change_cb);
406         vconf_ignore_key_changed(VCONFKEY_SETAPPL_STATE_DATA_ROAMING_BOOL, __data_roaming_change_cb);
407
408         if (ad->ly_main != NULL) {
409                 evas_object_del(ad->ly_main);
410         }
411         if(ad->network_ug_pop)
412         {
413                 evas_object_del(ad->network_ug_pop);
414                 ad->network_ug_pop = NULL;
415         }
416         ad->data_sel_net = NULL;//reset NULL after genlis destoryed with ly_main.
417
418         setting_view_network_main.is_create = 0;
419         return SETTING_RETURN_SUCCESS;
420 }
421
422 static int setting_network_main_update(void *cb)
423 {
424         SETTING_TRACE_BEGIN;
425         /* error check */
426         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
427
428         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
429
430         if (ad->ly_main != NULL) {
431
432                 evas_object_show(ad->ly_main);
433         }
434         SETTING_TRACE_END;
435
436         return SETTING_RETURN_SUCCESS;
437 }
438
439 static int setting_network_main_cleanup(void *cb)
440 {
441         /* error check */
442         /* retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER); */
443
444         /* SettingNetworkUG *ad = (SettingNetworkUG *)cb; */
445
446         /* all the view in view stack shared the ad->ly_main, it cannot be hided!!! */
447         /* if(ad->ly_main != NULL) */
448         /* { */
449         /* evas_object_hide(ad->ly_main); */
450         /* } */
451
452         return SETTING_RETURN_SUCCESS;
453 }
454
455 /* ***************************************************
456  *
457  *general func
458  *
459  ***************************************************/
460
461 /* ***************************************************
462  *
463  *call back func
464  *
465  ***************************************************/
466
467 static void
468 setting_network_main_click_softkey_help_cb(void *data, Evas_Object *obj,
469                                            void *event_info)
470 {
471         SETTING_TRACE_BEGIN;
472         /* error check */
473         retm_if(data == NULL, "Data parameter is NULL");
474
475         SettingNetworkUG *ad = (SettingNetworkUG *) data;
476         setting_view_change(&setting_view_network_main,
477                             &setting_view_network_main_help, ad);
478 }
479
480 static void
481 setting_network_main_click_softkey_back_cb(void *data, Evas_Object *obj,
482                                            void *event_info)
483 {
484         SETTING_TRACE_BEGIN;
485         /* error check */
486         retm_if(data == NULL, "Data parameter is NULL");
487
488         SettingNetworkUG *ad = (SettingNetworkUG *) data;
489         /* Send destroy request */
490         ug_destroy_me(ad->ug);
491 }
492
493 static void
494 setting_network_main_item_Gendial_mouse_up_cb(void *data, Evas_Object *obj,
495                                               void *event_info)
496 {
497         SETTING_TRACE_BEGIN;
498         /* error check */
499         setting_retm_if(data == NULL, "Data parameter is NULL");
500         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
501         elm_genlist_item_selected_set(item, 0);
502         Setting_GenGroupItem_Data *list_item =
503             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
504
505         SettingNetworkUG *ad = (SettingNetworkUG *) data;
506
507         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
508         int ret;
509
510         if (!safeStrCmp("IDS_ST_BODY_SELECT_NETWORK", list_item->keyStr)) {
511                 ret =
512                     setting_view_change(&setting_view_network_main,
513                                         &setting_view_network_select_network,
514                                         ad);
515         }
516         else if (!safeStrCmp(KeyStr_UsePacketData, list_item->keyStr)) {
517                 int old_status = elm_check_state_get(list_item->eo_check);
518                 /* new status */
519                 list_item->chk_status = !old_status;
520                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
521                 if (!list_item->chk_status) {
522                         ad->popup =
523                             setting_create_popup_with_btn(ad, ad->win_get,
524                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_OFF_DESC),
525                                                  setting_network_use_packet_resp_cb,
526                                                  0, 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
527                 } else {
528                         ad->popup =
529                             setting_create_popup_with_btn(ad, ad->win_get,
530                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_ON_DESC),
531                                                  setting_network_use_packet_resp_cb,
532                                                  0, 1, _("IDS_COM_SK_OK"));
533                 }
534
535         } else if (!safeStrCmp(KeyStr_DataRoaming, list_item->keyStr)) {
536                 int old_status = elm_check_state_get(list_item->eo_check);
537                 /* new status */
538                 list_item->chk_status = !old_status;
539                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
540
541                 char *notify_str = NULL;
542                 if (!list_item->chk_status) {
543                         notify_str = SETTING_NETWORK_DATA_ROMING_OFF_DESC;
544                         ad->popup = setting_create_popup_with_btn(ad, ad->win_get,
545                                                           NULL, notify_str,
546                                                           __setting_network_data_roaming_resp_cb, 0,
547                                                           1, _("IDS_COM_SK_OK"));
548                 } else {
549                         int err = 0;
550                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
551                                                  SETTING_ON_OFF_BTN_ON, &err);
552                 }
553         } else if(!safeStrCmp(CONNECTION_DSC, list_item->keyStr)) {
554                 ret = setting_view_change(&setting_view_network_main,
555                                         &setting_view_network_con, ad);
556         }
557 }
558
559 static void
560 setting_network_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
561 {
562         SETTING_TRACE_BEGIN;
563         /* error check */
564         retm_if(data == NULL, "Data parameter is NULL");
565         SettingNetworkUG *ad = NULL;
566         Setting_GenGroupItem_Data *list_item =
567             (Setting_GenGroupItem_Data *) data;
568         ad = list_item->userdata;
569         list_item->chk_status = elm_check_state_get(obj);       /*  for genlist update status */
570
571         if (obj == ad->data_use_packet->eo_check) {
572                 if (!list_item->chk_status) {
573                         ad->popup =
574                             setting_create_popup_with_btn(ad, ad->win_get,
575                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_OFF_DESC),
576                                                  setting_network_use_packet_resp_cb,
577                                                  0, 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
578                 } else {
579                         ad->popup =
580                             setting_create_popup_with_btn(ad, ad->win_get,
581                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_ON_DESC),
582                                                  setting_network_use_packet_resp_cb,
583                                                  0, 1, _("IDS_COM_SK_OK"));
584                 }
585         }else if (obj == ad->data_roaming->eo_check) {
586                 char *notify_str = NULL;
587                 if (!list_item->chk_status) {
588                         notify_str = SETTING_NETWORK_DATA_ROMING_OFF_DESC;
589                         ad->popup = setting_create_popup_with_btn(ad, ad->win_get,
590                                                           NULL, notify_str,
591                                                           __setting_network_data_roaming_resp_cb, 0,
592                                                           1, _("IDS_COM_SK_OK"));
593                 } else {
594                         int err = 0;
595                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
596                                                  SETTING_ON_OFF_BTN_ON, &err);
597                 }
598         }
599 }
600
601 static void
602 setting_network_use_packet_resp_cb(void *data, Evas_Object *obj,
603                                    void *event_info)
604 {
605         SETTING_TRACE_BEGIN;
606         retm_if(data == NULL, "Data parameter is NULL");
607
608         SettingNetworkUG *ad = (SettingNetworkUG *) data;
609         int err = 0;            /* error check   */
610         int response_type = btn_type(obj);
611
612         int value = 0;
613         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &value, &err);
614         setting_retm_if(err != 0, "get vconf failed");
615         SETTING_TRACE("value = %d", value);
616         if (POPUP_RESPONSE_OK == response_type) {
617                 if (value == 0) {
618                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
619                                                  SETTING_ON_OFF_BTN_ON, &err);
620                         setting_retm_if(err != 0, "set vconf failed");
621
622                         elm_check_state_set(ad->data_use_packet->eo_check, 1);
623                         ad->data_use_packet->chk_status = 1;
624
625                         /* if called by other apps, destroy ug */
626                         if (!safeStrCmp(ad->view_type_string, "DATA_ROAMING")) {
627                                 if (ad->popup) {
628                                         evas_object_del(ad->popup);
629                                         ad->popup = NULL;
630                                 }
631                                 ug_destroy_me(ad->ug);
632                                 return;
633                         }
634                 } else {
635                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
636                                                  SETTING_ON_OFF_BTN_OFF, &err);
637                         setting_retm_if(err != 0, "set vconf failed");
638
639                         elm_check_state_set(ad->data_use_packet->eo_check, 0);
640                         ad->data_use_packet->chk_status = 0;
641
642                         /* should set data_roming as same as status of use_packet_data */
643                         int data_roaming_value = 0;
644                         setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, &data_roaming_value, &err);
645                         setting_retm_if(err != 0, "get vconf failed");
646                         if (data_roaming_value) {
647                                 setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
648                                                          SETTING_ON_OFF_BTN_OFF, &err);
649                                 setting_retm_if(err != 0, "set vconf failed");
650
651                                 elm_check_state_set(ad->data_roaming->eo_check, 0);
652                                 ad->data_roaming->chk_status = 0;
653                         }
654                 }
655         } else if (POPUP_RESPONSE_CANCEL == response_type) {
656                 /* rollback */
657                 if (value == 1) {
658                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
659                                                  SETTING_ON_OFF_BTN_ON, &err);
660                         setting_retm_if(err != 0, "set vconf failed");
661                         elm_check_state_set(ad->data_use_packet->eo_check, 1);
662                         ad->data_use_packet->chk_status = 1;
663                 }
664         }
665         if (ad->popup)
666         {
667                 evas_object_del(ad->popup);
668                 ad->popup = NULL;
669         }
670
671 }
672
673 static void __setting_network_data_roaming_resp_cb(void *data, Evas_Object *obj,
674                                              void *event_info)
675 {
676         SETTING_TRACE_BEGIN;
677         retm_if(data == NULL, "Data parameter is NULL");
678
679         SettingNetworkUG *ad = (SettingNetworkUG *) data;
680         int response_type = btn_type(obj);
681         SETTING_TRACE("elm_object_parent_widget_get(obj):%p", elm_object_parent_widget_get(obj));
682         SETTING_TRACE("obj:%p", obj);
683         if (POPUP_RESPONSE_OK == response_type) {
684                 int value = 0;
685                 int err = 0;
686                 setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, &value, &err);
687
688                 if (value == 0) {
689                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
690                                                  SETTING_ON_OFF_BTN_ON, &err);
691                         setting_retm_if(err != 0, "set vconf failed");
692
693                         elm_check_state_set(ad->data_roaming->eo_check, 1);
694                         ad->data_roaming->chk_status = 1;
695
696                         /* if called by other apps, destroy ug */
697                         if (!safeStrCmp(ad->view_type_string, "DATA_ROAMING")) {
698                                 if (ad->popup)
699                                 {
700                                         evas_object_del(ad->popup);
701                                         ad->popup = NULL;
702                                 }
703                                 ug_destroy_me(ad->ug);
704                                 return;
705                         }
706                 } else {
707                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
708                                                  SETTING_ON_OFF_BTN_OFF, &err);
709                         setting_retm_if(err != 0, "set vconf failed");
710
711                         elm_check_state_set(ad->data_roaming->eo_check, 0);
712                         ad->data_roaming->chk_status = 0;
713                 }
714         }
715
716         if (ad->popup)
717         {
718                 evas_object_del(ad->popup);
719                 ad->popup = NULL;
720         }
721 }
722