new release for RSA
[apps/core/preloaded/settings.git] / setting-network / src / setting-network-main.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 #include <setting-network-main.h>
22
23 #define MOBILE_DATA_WITHOUT_WIFI_STR                    "IDS_ST_BODY_MOBILE_DATA_WILL_BE_USED_IF_YOU_DOWNLOAD_OR_UPLOAD_DATA_WITHOUT_WI_FI_CONNECTION"
24 #define UMTS_MODE_WORK_OUTSIDE_STR                                      "IDS_ST_BODY_UMTS_MODE_ONLY_WORKS_INSIDE_3G_COVERAGE_AREA"
25 #define BAND_OPERATE_OUTSIDE_USA_CANADA_STR             "IDS_ST_BODY_THIS_BAND_MAY_NOT_WORK_OUTSIDE_THE_USA_AND_CANADA"
26
27 static int setting_network_main_create(void *cb);
28 static int setting_network_main_destroy(void *cb);
29 static int setting_network_main_update(void *cb);
30 static int setting_network_main_cleanup(void *cb);
31
32 setting_view setting_view_network_main = {
33         .create = setting_network_main_create,
34         .destroy = setting_network_main_destroy,
35         .update = setting_network_main_update,
36         .cleanup = setting_network_main_cleanup,
37 };
38
39 static void setting_network_main_item_Gendial_mouse_up_cb(void *data,
40                                                           Evas_Object *obj,
41                                                           void *event_info);
42 static void setting_network_main_click_softkey_help_cb(void *data,
43                                                        Evas_Object *obj,
44                                                        void *event_info);
45 static void setting_network_main_click_softkey_back_cb(void *data,
46                                                        Evas_Object *obj,
47                                                        void *event_info);
48 static void setting_network_main_chk_btn_cb(void *data, Evas_Object *obj,
49                                             void *event_info);
50 static void setting_network_use_packet_resp_cb(void *data, Evas_Object *obj,
51                                                void *event_info);
52 static void __setting_network_data_roaming_resp_cb(void *data, Evas_Object *obj,
53                                              void *event_info);
54
55
56 /* ***************************************************
57  *
58  *basic func
59  *
60  ***************************************************/
61  #if DISABLED_CODE
62 static void __ask_create_gsm_resp_cb(void *data, Evas_Object *obj,
63                                            void *event_info)
64 {
65         SETTING_TRACE_BEGIN;
66
67         SettingNetworkUG *ad = (SettingNetworkUG *) data;
68         ret_if(NULL == data);
69         int response_type = btn_type(obj);
70         bool rollback_flag = FALSE;
71         if (POPUP_RESPONSE_OK == response_type) {
72                 int tapi_ret = TAPI_API_INVALID_INPUT;
73
74                 //async: TAPI_EVENT_NETWORK_SETNWBAND_CNF
75                 tapi_ret =
76                     tel_set_network_band(ad->handle, TAPI_NETWORK_BAND_MODE_ONLY,
77                                          TAPI_NETWORK_BAND_TYPE_GSM_850_1900,
78                                          setting_tapi_set_band_cb, ad);
79                 if (tapi_ret != TAPI_API_SUCCESS) {
80                         SETTING_TRACE_DEBUG
81                             ("%s*** [ERR] tel_set_network_band. tapi_ret=%d ***%s",
82                              SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
83                         rollback_flag = TRUE;
84
85                 }
86
87         } else if (POPUP_RESPONSE_CANCEL == response_type) {
88                 rollback_flag = TRUE;
89         }
90         if (rollback_flag)
91         {
92                 //rollback
93                 int err;
94                 int value = TAPI_NETWORK_BAND_TYPE_ANY;
95                 setting_get_int_slp_key(ad->data_net_mode->int_slp_setting_binded,
96                                         &(value), &err);
97                 /** @todo check 'err' variable for exception handling */
98                 elm_radio_value_set(ad->data_net_mode->rgd, value);
99         }
100         evas_object_del(ad->pop_gsm);
101         ad->pop_gsm = NULL;
102
103 }
104 #endif
105 void __network_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
106 {
107         SETTING_TRACE_BEGIN;
108         /* error check */
109         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
110         ret_if(NULL == data);
111         SettingNetworkUG *ad = (SettingNetworkUG *) data;
112         Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
113         elm_genlist_item_selected_set(subitem, 0);
114         Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
115         if (data_subItem->chk_status == elm_radio_value_get(ad->data_net_mode->rgd))
116         {
117                 return;
118         }
119         elm_radio_value_set(ad->data_net_mode->rgd, data_subItem->chk_status);
120
121         int tapi_ret = TAPI_API_INVALID_INPUT;
122         TelNetworkBand_t band = TAPI_NETWORK_BAND_TYPE_ANY;
123
124         switch (data_subItem->chk_status) {
125
126         case TAPI_NETWORK_BAND_TYPE_ANY:
127                 band = TAPI_NETWORK_BAND_TYPE_ANY;
128                 break;
129
130         case TAPI_NETWORK_BAND_TYPE_GSM_900_1800:
131                 band = TAPI_NETWORK_BAND_TYPE_GSM_900_1800;
132                 break;
133
134         case TAPI_NETWORK_BAND_TYPE_GSM_850_1900:
135                 /*ad->pop_gsm = setting_create_popup_with_btn(ad,
136                                                   ad->win_get,
137                                                   NULL, _(BAND_OPERATE_OUTSIDE_USA_CANADA_STR),
138                                                   __ask_create_gsm_resp_cb,
139                                                   0, 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
140                 */
141                 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(BAND_OPERATE_OUTSIDE_USA_CANADA_STR), NULL, POPUP_INTERVAL, FALSE, FALSE);
142                 return;
143
144         case TAPI_NETWORK_BAND_TYPE_WCDMA:
145                 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(UMTS_MODE_WORK_OUTSIDE_STR), NULL, POPUP_INTERVAL, FALSE, FALSE);
146                 band = TAPI_NETWORK_BAND_TYPE_WCDMA;
147                 break;
148         default:
149                 SETTING_TRACE("Unknown Tel-Net band type");
150                 break;
151         }
152
153         //async: TAPI_EVENT_NETWORK_SETNWBAND_CNF
154         tapi_ret =
155             tel_set_network_band(ad->handle, TAPI_NETWORK_BAND_MODE_ONLY, band,
156                                  setting_tapi_set_band_cb, ad);
157         if (tapi_ret != TAPI_API_SUCCESS) {
158                 SETTING_TRACE_DEBUG
159                     ("%s*** [ERR] tel_set_network_band. tapi_ret=%d ***%s",
160                      SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
161
162                 //rollback
163                 int err;
164                 int value = TAPI_NETWORK_BAND_TYPE_ANY;
165                 setting_get_int_slp_key(ad->data_net_mode->int_slp_setting_binded,
166                                         &(value), &err);
167                 /** @todo check 'err' variable for exception handling */
168                 elm_radio_value_set(ad->data_net_mode->rgd, value);
169                 return;
170         }
171 }
172
173
174 static void
175 __setting_network_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
176 {
177         ret_if(NULL == data || NULL == event_info);
178         SETTING_TRACE_BEGIN;
179         SettingNetworkUG *ad = (SettingNetworkUG *) data;
180         Elm_Object_Item *parentItem = event_info;       /* parent item */
181         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
182         Evas_Object *scroller = elm_object_item_widget_get(parentItem);
183
184         Evas_Object *rgd;
185         if (data_parentItem == ad->data_net_mode) {
186                 rgd = elm_radio_add(scroller);
187                 elm_radio_value_set(rgd, -1);
188
189                 setting_create_Gendial_exp_sub_field(scroller,
190                                                      &itc_1icon_1text_sub,
191                                                      __network_sub_list_sel_cb,
192                                                      ad, parentItem,
193                                                      SWALLOW_Type_1RADIO, rgd,
194                                                      TAPI_NETWORK_BAND_TYPE_ANY,
195                                                      "IDS_COM_BODY_AUTOMATIC", NULL);
196
197                 setting_create_Gendial_exp_sub_field(scroller,
198                                                      &itc_1icon_1text_sub,
199                                                      __network_sub_list_sel_cb,
200                                                      ad, parentItem,
201                                                      SWALLOW_Type_1RADIO, rgd,
202                                                      TAPI_NETWORK_BAND_TYPE_GSM_900_1800,
203                                                      STR_SETTING_GSM_900_1800, NULL);
204
205                 setting_create_Gendial_exp_sub_field(scroller,
206                                                      &itc_1icon_1text_sub,
207                                                      __network_sub_list_sel_cb,
208                                                      ad, parentItem,
209                                                      SWALLOW_Type_1RADIO, rgd,
210                                                      TAPI_NETWORK_BAND_TYPE_GSM_850_1900,
211                                                      STR_SETTING_GSM_850_1900, NULL);
212
213                 setting_create_Gendial_exp_sub_field(scroller,
214                                                      &itc_1icon_1text_sub,
215                                                      __network_sub_list_sel_cb,
216                                                      ad, parentItem,
217                                                      SWALLOW_Type_1RADIO, rgd,
218                                                      TAPI_NETWORK_BAND_TYPE_WCDMA,
219                                                      STR_SETTING_UMTS, NULL);
220
221                 data_parentItem->rgd = rgd;
222                 setting_update_chk_status(rgd, data_parentItem->int_slp_setting_binded);
223
224         }
225 }
226
227 static int setting_network_main_create(void *cb)
228 {
229         SETTING_TRACE_BEGIN;
230         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
231
232         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
233         /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
234         int value = 0;
235         int k = -1;
236         /*  ****END****  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
237
238 #ifdef SUPPORT_MDM
239         if(ad->mdm_server_state == MDM_RESULT_SUCCESS)
240         {
241                 ad->roaming_policy_status = mdm_get_allow_roaming_data();
242                 if(ad->roaming_policy_status == MDM_STATUS_ERROR)
243                 {
244                         SETTING_TRACE_DEBUG(">>>>>> function error - mdm_get_allow_roaming_data() ");
245                 }
246                 else
247                 {
248                         SETTING_TRACE_DEBUG("function success - mdm_get_allow_roaming_data() --> %d ", ad->roaming_policy_status );
249
250                         if (ad->roaming_policy_status == MDM_ALLOWED)
251                         {
252                                 SETTING_TRACE_DEBUG(">>> MDM ALLOWED ");
253                         }
254                         else if (ad->roaming_policy_status == MDM_RESTRICTED)
255                         {
256                                 SETTING_TRACE_DEBUG(">>> MDM RESTRICTED ");
257                         }
258                 }
259         }
260 #endif
261
262         Evas_Object *scroller;
263
264         ad->ly_main =
265             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
266                                                    ad->win_get,
267                                                    _("IDS_ST_BODY_NETWORK"),
268                                                    dgettext("sys_string",
269                                                             "IDS_COM_BODY_BACK"),
270                                                    NULL,//_("IDS_COM_BODY_HELP"),
271                                                    setting_network_main_click_softkey_back_cb,
272                                                    setting_network_main_click_softkey_help_cb,
273                                                    ad, &scroller,
274                                                    &ad->navi_bar);
275
276         setting_enable_expandable_genlist(scroller, ad,
277                                           __setting_network_main_exp_cb, NULL);
278         Elm_Object_Item *item = NULL;;
279
280         item =
281             elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
282                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
283         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
284
285         int value_use_packet;
286         int err_use_packet;
287         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
288                                  &value_use_packet, &err_use_packet);
289         /** @todo check 'err_use_packet' variable for exception handling */
290         ad->data_use_packet =
291             setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
292                                              setting_network_main_item_Gendial_mouse_up_cb,
293                                              ad, SWALLOW_Type_1TOGGLE, NULL,
294                                              NULL, value_use_packet,
295                                              KeyStr_UsePacketData, NULL,
296                                              setting_network_main_chk_btn_cb);
297         if (ad->data_use_packet) {
298                 ad->data_use_packet->userdata = ad;
299         } else {
300                 SETTING_TRACE_ERROR("ad->data_use_packet is NULL");
301         }
302
303         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
304                                          ad, SWALLOW_Type_LAYOUT_SPECIALIZTION,
305                                          NULL, NULL, 0, Data_packet_Desc, NULL,
306                                          NULL);
307
308         /* data roaming */
309         int value_data_roaming = 0;
310         int err_data_roaming = 0;
311         setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
312                                  &value_data_roaming, &err_data_roaming);
313         if (err_data_roaming != 0) {
314                 SETTING_TRACE_ERROR("get vconf failed");
315         }
316         ad->data_roaming = setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
317                                                             setting_network_main_item_Gendial_mouse_up_cb,
318                                                             ad, SWALLOW_Type_1TOGGLE, NULL,
319                                                             NULL, value_data_roaming,
320                                                             KeyStr_DataRoaming, NULL,
321                                                             setting_network_main_chk_btn_cb);
322         if (ad->data_roaming) {
323                 ad->data_roaming->userdata = ad;
324 #ifdef SUPPORT_MDM
325                 if(ad->mdm_server_state == MDM_RESULT_SUCCESS)
326                 {
327                         if (ad->roaming_policy_status == MDM_ALLOWED)
328                         {
329                                 setting_enable_genlist_item(ad->data_roaming->item);
330                         }
331                         else if (ad->roaming_policy_status == MDM_RESTRICTED)
332                         {
333                                 setting_disable_genlist_item(ad->data_roaming->item);
334                                 setting_create_popup_without_btn(ad, ad->ly_main, NULL, MDM_POLICY_DATA_ROAMING_RESTRICTED_STR,
335                                           NULL, POPUP_INTERVAL, FALSE, FALSE);
336                         }
337                 }
338 #endif
339         } else {
340                 SETTING_TRACE_ERROR("ad->data_roaming is NULL");
341         }
342
343         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
344                                          ad, SWALLOW_Type_LAYOUT_SPECIALIZTION,
345                                          NULL, NULL, 0, SETTING_NETWORK_DATA_ROMING_DESC, NULL,
346                                          NULL);
347
348
349         /* (void)setting_create_Gendial_field_titleItem(scroller, &(ad->itc_group_item), speciliztion, NULL); */
350
351         /*  check flight mode */
352         int flight_mode, err;
353         setting_get_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE, &flight_mode,
354                                  &err);
355         /** @todo check 'err' variable for exception handling */
356         SETTING_TRACE("flight_mode:%d", flight_mode);
357         char *sub_des = NULL;
358         if (flight_mode == 0) {
359                 /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
360                 ad->sel_net = TAPI_NETWORK_SELECTIONMODE_AUTOMATIC;
361                 ad->sel_act = TAPI_NETWORK_SYSTEM_NO_SRV;
362                 vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net);
363                 vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act);
364                 
365                 FREE(ad->sel_network);
366                 ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
367                 SETTING_TRACE("pa_sel_net_name:%s", ad->sel_network);
368                 if (NULL == ad->sel_network) {
369                     ad->sel_network = strndup("IDS_ST_BODY_NOSERVICE", strlen("IDS_ST_BODY_NOSERVICE")+1);
370                 }
371                 SETTING_TRACE("pa_net_name:%s", ad->sel_network);
372                 SETTING_TRACE("old act:%d", ad->sel_act);
373                 SETTING_TRACE("old network mode:%d", ad->sel_net);
374
375                 char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
376                 if (TAPI_NETWORK_SELECTIONMODE_MANUAL == value) {
377                         snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
378                                  "%s. %s (%s)", _("IDS_COM_BODY_MANUAL"), _(ad->sel_network),
379                                  setting_network_get_act_str(ad->sel_act));
380                 }
381                 else{
382                         snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
383                                  "%s. %s", _("IDS_COM_BODY_AUTOMATIC"), _(ad->sel_network));
384                 }
385
386                 ad->data_sel_net = setting_create_Gendial_field_def(scroller,
387                                                      &itc_2text_3,
388                                                      setting_network_main_item_Gendial_mouse_up_cb,
389                                                      ad, SWALLOW_Type_INVALID,
390                                                      NULL, NULL, 0,
391                                                      "IDS_ST_BODY_SELECT_NETWORK",
392                                                      sel_network_desc, NULL);
393                 if (ad->data_sel_net) {
394                         ad->data_sel_net->userdata = ad;
395                 } else {
396                         SETTING_TRACE_ERROR("ad->data_sel_net is NULL");
397                 }
398         }
399         /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
400         k = vconf_get_int(VCONFKEY_SETAPPL_NETWORK_MODE_INT, &value);
401         if (-1 != k) {
402                 SETTING_TRACE("value:%d", value);
403                 switch (value) {
404                 case TAPI_NETWORK_BAND_TYPE_ANY:
405                         sub_des = _("IDS_COM_BODY_AUTOMATIC");
406                         break;
407                 case TAPI_NETWORK_BAND_TYPE_GSM_900_1800:
408                         sub_des = _(STR_SETTING_GSM_900_1800);
409                         break;
410                 case TAPI_NETWORK_BAND_TYPE_GSM_850_1900:
411                         sub_des = _(STR_SETTING_GSM_850_1900);
412                         break;
413                 case TAPI_NETWORK_BAND_TYPE_WCDMA:
414                         sub_des = _(STR_SETTING_UMTS);
415                         break;
416                 default:
417                         break;
418                 }
419         }
420
421         ad->data_net_mode =
422             setting_create_Gendial_exp_parent_field(scroller,
423                                                     &itc_2text_3_parent,
424                                                     NULL, NULL,
425                                                     SWALLOW_Type_INVALID,
426                                                     "IDS_ST_BODY_NETWORK_MODE",
427                                                     sub_des);
428         if (ad->data_net_mode) {
429                 ad->data_net_mode->int_slp_setting_binded =
430                         INT_SLP_SETTING_NETWORK_MODE;
431                 ad->data_net_mode->userdata = ad;
432         } else {
433                 SETTING_TRACE_ERROR("ad->data_back is NULL");
434         }
435
436         setting_create_Gendial_field_def(scroller, &itc_1text,
437                                          setting_network_main_item_Gendial_mouse_up_cb,
438                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
439                                          0, CONNECTION_DSC,
440                                          NULL, NULL);
441 #if DISABLED_CODE
442         setting_create_Gendial_field_def(scroller, &itc_1text,
443                                          setting_network_main_item_Gendial_mouse_up_cb,
444                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
445                                          0, "IDS_ST_BODY_INTERNET_CONNECTION",
446                                          NULL, NULL);
447         setting_create_Gendial_field_def(scroller, &itc_1text,
448                                          setting_network_main_item_Gendial_mouse_up_cb,
449                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
450                                          0, STR_SETTING_MMS_CONNECTIONS, NULL,
451                                          NULL);
452 #ifdef ENABLED_PREFERRED_NETWORKS
453         setting_create_Gendial_field_def(scroller, &itc_1text,
454                                          setting_network_main_item_Gendial_mouse_up_cb,
455                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
456                                          0, "IDS_ST_BODY_PREFERRED_NETWORKS",
457                                          NULL, NULL);
458 #endif
459 #ifdef ENABLED_2G3G_NETWORK
460         /*  create 3g connection option */
461         setting_create_Gendial_field_def(scroller, &itc_1text,
462                                          setting_network_main_item_Gendial_mouse_up_cb,
463                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
464                                          0, "2G/3G Connection", NULL, NULL);
465
466         /* add blank rectangle */
467 #endif
468 #endif
469
470         item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
471                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
472         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
473
474         setting_view_network_main.is_create = 1;
475         return SETTING_RETURN_SUCCESS;
476 }
477
478 static int setting_network_main_destroy(void *cb)
479 {
480         /* error check */
481         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
482
483         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
484
485         if (ad->ly_main != NULL) {
486                 evas_object_del(ad->ly_main);
487         }
488         ad->data_sel_net = NULL;//reset NULL after genlis destoryed with ly_main.
489
490         setting_view_network_main.is_create = 0;
491         return SETTING_RETURN_SUCCESS;
492 }
493
494 static int setting_network_main_update(void *cb)
495 {
496         SETTING_TRACE_BEGIN;
497         /* error check */
498         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
499
500         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
501
502         if (ad->ly_main != NULL) {
503
504                 evas_object_show(ad->ly_main);
505         }
506         SETTING_TRACE_END;
507
508         return SETTING_RETURN_SUCCESS;
509 }
510
511 static int setting_network_main_cleanup(void *cb)
512 {
513         /* error check */
514         /* retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER); */
515
516         /* SettingNetworkUG *ad = (SettingNetworkUG *)cb; */
517
518         /* all the view in view stack shared the ad->ly_main, it cannot be hided!!! */
519         /* if(ad->ly_main != NULL) */
520         /* { */
521         /* evas_object_hide(ad->ly_main); */
522         /* } */
523
524         return SETTING_RETURN_SUCCESS;
525 }
526
527 /* ***************************************************
528  *
529  *general func
530  *
531  ***************************************************/
532
533 /* ***************************************************
534  *
535  *call back func
536  *
537  ***************************************************/
538
539 static void
540 setting_network_main_click_softkey_help_cb(void *data, Evas_Object *obj,
541                                            void *event_info)
542 {
543         SETTING_TRACE_BEGIN;
544         /* error check */
545         retm_if(data == NULL, "Data parameter is NULL");
546
547         SettingNetworkUG *ad = (SettingNetworkUG *) data;
548         setting_view_change(&setting_view_network_main,
549                             &setting_view_network_main_help, ad);
550 }
551
552 static void
553 setting_network_main_click_softkey_back_cb(void *data, Evas_Object *obj,
554                                            void *event_info)
555 {
556         SETTING_TRACE_BEGIN;
557         /* error check */
558         retm_if(data == NULL, "Data parameter is NULL");
559
560         SettingNetworkUG *ad = (SettingNetworkUG *) data;
561         /* Send destroy request */
562         ug_destroy_me(ad->ug);
563 }
564
565 static void
566 setting_network_main_item_Gendial_mouse_up_cb(void *data, Evas_Object *obj,
567                                               void *event_info)
568 {
569         SETTING_TRACE_BEGIN;
570         /* error check */
571         setting_retm_if(data == NULL, "Data parameter is NULL");
572         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
573         elm_genlist_item_selected_set(item, 0);
574         Setting_GenGroupItem_Data *list_item =
575             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
576
577         SettingNetworkUG *ad = (SettingNetworkUG *) data;
578
579         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
580         int ret;
581
582         if (!safeStrCmp("IDS_ST_BODY_SELECT_NETWORK", list_item->keyStr)) {
583                 ret =
584                     setting_view_change(&setting_view_network_main,
585                                         &setting_view_network_select_network,
586                                         ad);
587         } else
588             if (!safeStrCmp
589                 ("IDS_ST_BODY_INTERNET_CONNECTION", list_item->keyStr)) {
590
591                 ad->con_type = NET_SERVICE_INTERNET;
592                 ret =
593                     setting_view_change(&setting_view_network_main,
594                                         &setting_view_network_connection_create,
595                                         ad);
596         } else if (!safeStrCmp(STR_SETTING_MMS_CONNECTIONS, list_item->keyStr)) {
597                 ad->con_type = NET_SERVICE_MMS;
598
599                 ret =
600                     setting_view_change(&setting_view_network_main,
601                                         &setting_view_network_connection_create,
602                                         ad);
603         }
604 #ifdef ENABLED_PREFERRED_NETWORKS
605         else if (!safeStrCmp("IDS_ST_BODY_PREFERRED_NETWORKS",
606                                 list_item->keyStr)) {
607
608                 int value = -1;
609                 int err = -1;
610                 ret =
611                     setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value,
612                                             &err);
613                         /** @todo check 'err' variable for exception handling */
614                 SETTING_TRACE("INT_SLP_SETTING_SIM_SLOT value:%d", value);
615                 switch (value) {
616                 case VCONFKEY_TELEPHONY_SIM_INSERTED:
617                         /* To Recreate the view in order to search the perferred network again. */
618                         /* ret = setting_view_destroy(&setting_view_network_preferred_network, ad); */
619                         ret =
620                             setting_view_change(&setting_view_network_main,
621                                                 &setting_view_network_preferred_network,
622                                                 ad);
623
624                         break;
625
626                 case VCONFKEY_TELEPHONY_SIM_NOT_PRESENT:
627
628                         setting_create_simple_popup(NULL, ad->win_get,
629                                                     NULL, _("IDS_ST_SECURITY_BODY_NOIMSI"));
630                         SETTING_TRACE_DEBUG
631                             ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
632                              SETTING_FONT_RED, value, SETTING_FONT_BLACK);
633                         return;
634
635                         break;
636
637                 case VCONFKEY_TELEPHONY_SIM_CARD_ERROR:
638                 case VCONFKEY_TELEPHONY_SIM_UNKNOWN:
639
640                         setting_create_simple_popup(NULL, ad->win_get,
641                                                     NULL, _("IDS_COM_BODY_INVALID_SIM_CARD"));
642                         SETTING_TRACE_DEBUG
643                             ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
644                              SETTING_FONT_RED, value, SETTING_FONT_BLACK);
645                         return;
646
647                         break;
648                 default:
649                         SETTING_TRACE("Unknown SIM information from vconf");
650                         break;
651                 }
652         }
653 #endif
654 #ifdef ENABLED_2G3G_NETWORK
655         else if (!safeStrCmp("2G/3G Connection", list_item->keyStr)) {
656                 ret =
657                     setting_view_change(&setting_view_network_main,
658                                         &setting_view_network_3gcon, ad);
659         }
660 #endif
661         else if (!safeStrCmp(KeyStr_UsePacketData, list_item->keyStr)) {
662                 int old_status = elm_check_state_get(list_item->eo_check);
663                 /* new status */
664                 list_item->chk_status = !old_status;
665                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
666                 if (!list_item->chk_status) {
667                         ad->popup =
668                             setting_create_popup_with_btn(ad, ad->win_get,
669                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_OFF_DESC),
670                                                  setting_network_use_packet_resp_cb,
671                                                  0, 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
672                 } else {
673                         ad->popup =
674                             setting_create_popup_with_btn(ad, ad->win_get,
675                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_ON_DESC),
676                                                  setting_network_use_packet_resp_cb,
677                                                  0, 1, _("IDS_COM_SK_OK"));
678                 }
679
680         } else if (!safeStrCmp(KeyStr_DataRoaming, list_item->keyStr)) {
681                 int old_status = elm_check_state_get(list_item->eo_check);
682                 /* new status */
683                 list_item->chk_status = !old_status;
684                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
685
686                 char *notify_str = NULL;
687                 if (!list_item->chk_status) {
688                         notify_str = SETTING_NETWORK_DATA_ROMING_OFF_DESC;
689                         ad->popup = setting_create_popup_with_btn(ad, ad->win_get,
690                                                           NULL, notify_str,
691                                                           __setting_network_data_roaming_resp_cb, 0,
692                                                           1, _("IDS_COM_SK_OK"));
693                 } else {
694                         int err = 0;
695                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
696                                                  SETTING_ON_OFF_BTN_ON, &err);
697                         setting_retm_if(err != 0, "set vconf failed");
698
699                         /* should set use_packet_data as same as the status of data_roming */
700                         int value = 0;
701                         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &value, &err);
702                         setting_retm_if(err != 0, "get vconf failed");
703                         if (!value) {
704                                 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
705                                                          SETTING_ON_OFF_BTN_ON, &err);
706                                 setting_retm_if(err != 0, "set vconf failed");
707
708                                 elm_check_state_set(ad->data_use_packet->eo_check, 1);
709                                 ad->data_use_packet->chk_status = 1;
710                         }
711                 }
712         } else if(!safeStrCmp(CONNECTION_DSC, list_item->keyStr)) {
713                 ret = setting_view_change(&setting_view_network_main,
714                                         &setting_view_network_con, ad);
715         }
716 }
717
718 static void
719 setting_network_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
720 {
721         SETTING_TRACE_BEGIN;
722         /* error check */
723         retm_if(data == NULL, "Data parameter is NULL");
724         SettingNetworkUG *ad = NULL;
725         Setting_GenGroupItem_Data *list_item =
726             (Setting_GenGroupItem_Data *) data;
727         ad = list_item->userdata;
728         list_item->chk_status = elm_check_state_get(obj);       /*  for genlist update status */
729
730         if (obj == ad->data_use_packet->eo_check) {
731                 if (!list_item->chk_status) {
732                         ad->popup =
733                             setting_create_popup_with_btn(ad, ad->win_get,
734                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_OFF_DESC),
735                                                  setting_network_use_packet_resp_cb,
736                                                  0, 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
737                 } else {
738                         ad->popup =
739                             setting_create_popup_with_btn(ad, ad->win_get,
740                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_ON_DESC),
741                                                  setting_network_use_packet_resp_cb,
742                                                  0, 1, _("IDS_COM_SK_OK"));
743                 }
744         }else if (obj == ad->data_roaming->eo_check) {
745                 char *notify_str = NULL;
746                 if (!list_item->chk_status) {
747                         notify_str = SETTING_NETWORK_DATA_ROMING_OFF_DESC;
748                         ad->popup = setting_create_popup_with_btn(ad, ad->win_get,
749                                                           NULL, notify_str,
750                                                           __setting_network_data_roaming_resp_cb, 0,
751                                                           1, _("IDS_COM_SK_OK"));
752                 } else {
753                         int err = 0;
754                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
755                                                  SETTING_ON_OFF_BTN_ON, &err);
756                         setting_retm_if(err != 0, "set vconf failed");
757
758                         /* should set use_packet_data as same as the status of data_roming */
759                         int value = 0;
760                         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &value, &err);
761                         setting_retm_if(err != 0, "get vconf failed");
762                         if (!value) {
763                                 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
764                                                         SETTING_ON_OFF_BTN_ON, &err);
765                                 setting_retm_if(err != 0, "set vconf failed");
766
767                                 elm_check_state_set(ad->data_use_packet->eo_check, 1);
768                                 ad->data_use_packet->chk_status = 1;
769                         }
770                 }
771         }
772 }
773
774 static void
775 setting_network_use_packet_resp_cb(void *data, Evas_Object *obj,
776                                    void *event_info)
777 {
778         SETTING_TRACE_BEGIN;
779         retm_if(data == NULL, "Data parameter is NULL");
780
781         SettingNetworkUG *ad = (SettingNetworkUG *) data;
782         int err = 0;            /* error check   */
783         int response_type = btn_type(obj);
784
785         int value = 0;
786         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &value, &err);
787         setting_retm_if(err != 0, "get vconf failed");
788         SETTING_TRACE("value = %d", value);
789         if (POPUP_RESPONSE_OK == response_type) {
790                 if (value == 0) {
791                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
792                                                  SETTING_ON_OFF_BTN_ON, &err);
793                         setting_retm_if(err != 0, "set vconf failed");
794
795                         elm_check_state_set(ad->data_use_packet->eo_check, 1);
796                         ad->data_use_packet->chk_status = 1;
797
798                         /* if called by other apps, destroy ug */
799                         if (!safeStrCmp(ad->view_type_string, "DATA_ROAMING")) {
800                                 if (ad->popup) {
801                                         evas_object_del(ad->popup);
802                                         ad->popup = NULL;
803                                 }
804                                 ug_destroy_me(ad->ug);
805                                 return;
806                         }
807                 } else {
808                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
809                                                  SETTING_ON_OFF_BTN_OFF, &err);
810                         setting_retm_if(err != 0, "set vconf failed");
811
812                         elm_check_state_set(ad->data_use_packet->eo_check, 0);
813                         ad->data_use_packet->chk_status = 0;
814
815                         /* should set data_roming as same as status of use_packet_data */
816                         int data_roaming_value = 0;
817                         setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, &data_roaming_value, &err);
818                         setting_retm_if(err != 0, "get vconf failed");
819                         if (data_roaming_value) {
820                                 setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
821                                                          SETTING_ON_OFF_BTN_OFF, &err);
822                                 setting_retm_if(err != 0, "set vconf failed");
823
824                                 elm_check_state_set(ad->data_roaming->eo_check, 0);
825                                 ad->data_roaming->chk_status = 0;
826                         }
827                 }
828         } else if (POPUP_RESPONSE_CANCEL == response_type) {
829                 /* rollback */
830                 if (value == 1) {
831                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
832                                                  SETTING_ON_OFF_BTN_ON, &err);
833                         setting_retm_if(err != 0, "set vconf failed");
834                         elm_check_state_set(ad->data_use_packet->eo_check, 1);
835                         ad->data_use_packet->chk_status = 1;
836                 }
837         }
838         if (ad->popup)
839         {
840                 evas_object_del(ad->popup);
841                 ad->popup = NULL;
842         }
843
844 }
845
846 static void __setting_network_data_roaming_resp_cb(void *data, Evas_Object *obj,
847                                              void *event_info)
848 {
849         SETTING_TRACE_BEGIN;
850         retm_if(data == NULL, "Data parameter is NULL");
851
852         SettingNetworkUG *ad = (SettingNetworkUG *) data;
853         int response_type = btn_type(obj);
854         SETTING_TRACE("elm_object_parent_widget_get(obj):%p", elm_object_parent_widget_get(obj));
855         SETTING_TRACE("obj:%p", obj);
856         if (POPUP_RESPONSE_OK == response_type) {
857                 int value = 0;
858                 int err = 0;
859                 setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, &value, &err);
860
861                 if (value == 0) {
862                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
863                                                  SETTING_ON_OFF_BTN_ON, &err);
864                         setting_retm_if(err != 0, "set vconf failed");
865
866                         elm_check_state_set(ad->data_roaming->eo_check, 1);
867                         ad->data_roaming->chk_status = 1;
868
869                         /* if called by other apps, destroy ug */
870                         if (!safeStrCmp(ad->view_type_string, "DATA_ROAMING")) {
871                                 if (ad->popup)
872                                 {
873                                         evas_object_del(ad->popup);
874                                         ad->popup = NULL;
875                                 }
876                                 ug_destroy_me(ad->ug);
877                                 return;
878                         }
879                 } else {
880                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
881                                                  SETTING_ON_OFF_BTN_OFF, &err);
882                         setting_retm_if(err != 0, "set vconf failed");
883
884                         elm_check_state_set(ad->data_roaming->eo_check, 0);
885                         ad->data_roaming->chk_status = 0;
886                 }
887         }
888
889         if (ad->popup)
890         {
891                 evas_object_del(ad->popup);
892                 ad->popup = NULL;
893         }
894 }
895