Disable Wi-fi / Tethering / Network menu in calling,disable 'Network' when flight...
[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                 if (ad->data_net_mode) {
96                         setting_get_int_slp_key(ad->data_net_mode->int_slp_setting_binded,
97                                                 &(value), &err);
98                         /** @todo check 'err' variable for exception handling */
99                         elm_radio_value_set(ad->data_net_mode->rgd, value);
100                 }
101         }
102         evas_object_del(ad->pop_gsm);
103         ad->pop_gsm = NULL;
104
105 }
106 #endif
107 void __network_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
108 {
109         SETTING_TRACE_BEGIN;
110         /* error check */
111         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
112         ret_if(NULL == data);
113         SettingNetworkUG *ad = (SettingNetworkUG *) data;
114         Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
115         elm_genlist_item_selected_set(subitem, 0);
116         Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
117         if (data_subItem->chk_status == elm_radio_value_get(ad->data_net_mode->rgd))
118         {
119                 return;
120         }
121         elm_radio_value_set(ad->data_net_mode->rgd, data_subItem->chk_status);
122
123         int tapi_ret = TAPI_API_INVALID_INPUT;
124         TelNetworkBand_t band = TAPI_NETWORK_BAND_TYPE_ANY;
125
126         switch (data_subItem->chk_status) {
127
128         case TAPI_NETWORK_BAND_TYPE_ANY:
129                 band = TAPI_NETWORK_BAND_TYPE_ANY;
130                 break;
131
132         case TAPI_NETWORK_BAND_TYPE_GSM_900_1800:
133                 band = TAPI_NETWORK_BAND_TYPE_GSM_900_1800;
134                 break;
135
136         case TAPI_NETWORK_BAND_TYPE_GSM_850_1900:
137                 /*ad->pop_gsm = setting_create_popup_with_btn(ad,
138                                                   ad->win_get,
139                                                   NULL, _(BAND_OPERATE_OUTSIDE_USA_CANADA_STR),
140                                                   __ask_create_gsm_resp_cb,
141                                                   0, 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
142                 */
143                 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(BAND_OPERATE_OUTSIDE_USA_CANADA_STR), NULL, POPUP_INTERVAL, FALSE, FALSE);
144                 return;
145
146         case TAPI_NETWORK_BAND_TYPE_WCDMA:
147                 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(UMTS_MODE_WORK_OUTSIDE_STR), NULL, POPUP_INTERVAL, FALSE, FALSE);
148                 band = TAPI_NETWORK_BAND_TYPE_WCDMA;
149                 break;
150         default:
151                 SETTING_TRACE("Unknown Tel-Net band type");
152                 break;
153         }
154
155         //async: TAPI_EVENT_NETWORK_SETNWBAND_CNF
156         tapi_ret =
157             tel_set_network_band(ad->handle, TAPI_NETWORK_BAND_MODE_ONLY, band,
158                                  setting_tapi_set_band_cb, ad);
159         if (tapi_ret != TAPI_API_SUCCESS) {
160                 SETTING_TRACE_DEBUG
161                     ("%s*** [ERR] tel_set_network_band. tapi_ret=%d ***%s",
162                      SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
163
164                 //rollback
165                 int err;
166                 int value = TAPI_NETWORK_BAND_TYPE_ANY;
167                 setting_get_int_slp_key(ad->data_net_mode->int_slp_setting_binded,
168                                         &(value), &err);
169                 /** @todo check 'err' variable for exception handling */
170                 elm_radio_value_set(ad->data_net_mode->rgd, value);
171                 return;
172         }
173 }
174
175
176 static void
177 __setting_network_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
178 {
179         ret_if(NULL == data || NULL == event_info);
180         SETTING_TRACE_BEGIN;
181         SettingNetworkUG *ad = (SettingNetworkUG *) data;
182         Elm_Object_Item *parentItem = event_info;       /* parent item */
183         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
184         Evas_Object *scroller = elm_object_item_widget_get(parentItem);
185
186         Evas_Object *rgd;
187         if (data_parentItem == ad->data_net_mode) {
188                 rgd = elm_radio_add(scroller);
189                 elm_radio_value_set(rgd, -1);
190
191                 setting_create_Gendial_exp_sub_field(scroller,
192                                                      &itc_1icon_1text_sub,
193                                                      __network_sub_list_sel_cb,
194                                                      ad, parentItem,
195                                                      SWALLOW_Type_1RADIO, rgd,
196                                                      TAPI_NETWORK_BAND_TYPE_ANY,
197                                                      "IDS_COM_BODY_AUTOMATIC", NULL);
198
199                 setting_create_Gendial_exp_sub_field(scroller,
200                                                      &itc_1icon_1text_sub,
201                                                      __network_sub_list_sel_cb,
202                                                      ad, parentItem,
203                                                      SWALLOW_Type_1RADIO, rgd,
204                                                      TAPI_NETWORK_BAND_TYPE_GSM_900_1800,
205                                                      STR_SETTING_GSM_900_1800, NULL);
206
207                 setting_create_Gendial_exp_sub_field(scroller,
208                                                      &itc_1icon_1text_sub,
209                                                      __network_sub_list_sel_cb,
210                                                      ad, parentItem,
211                                                      SWALLOW_Type_1RADIO, rgd,
212                                                      TAPI_NETWORK_BAND_TYPE_GSM_850_1900,
213                                                      STR_SETTING_GSM_850_1900, NULL);
214
215                 setting_create_Gendial_exp_sub_field(scroller,
216                                                      &itc_1icon_1text_sub,
217                                                      __network_sub_list_sel_cb,
218                                                      ad, parentItem,
219                                                      SWALLOW_Type_1RADIO, rgd,
220                                                      TAPI_NETWORK_BAND_TYPE_WCDMA,
221                                                      STR_SETTING_UMTS, NULL);
222
223                 data_parentItem->rgd = rgd;
224                 setting_update_chk_status(rgd, data_parentItem->int_slp_setting_binded);
225
226         }
227 }
228
229 static int setting_network_main_create(void *cb)
230 {
231         SETTING_TRACE_BEGIN;
232         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
233
234         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
235         /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
236         int value = 0;
237         int k = -1;
238         /*  ****END****  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
239
240 #ifdef SUPPORT_MDM
241         if(ad->mdm_server_state == MDM_RESULT_SUCCESS)
242         {
243                 ad->roaming_policy_status = mdm_get_allow_roaming_data();
244                 if(ad->roaming_policy_status == MDM_STATUS_ERROR)
245                 {
246                         SETTING_TRACE_DEBUG(">>>>>> function error - mdm_get_allow_roaming_data() ");
247                 }
248                 else
249                 {
250                         SETTING_TRACE_DEBUG("function success - mdm_get_allow_roaming_data() --> %d ", ad->roaming_policy_status );
251
252                         if (ad->roaming_policy_status == MDM_ALLOWED)
253                         {
254                                 SETTING_TRACE_DEBUG(">>> MDM ALLOWED ");
255                         }
256                         else if (ad->roaming_policy_status == MDM_RESTRICTED)
257                         {
258                                 SETTING_TRACE_DEBUG(">>> MDM RESTRICTED ");
259                         }
260                 }
261         }
262 #endif
263
264         Evas_Object *scroller;
265
266         ad->ly_main =
267             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
268                                                    ad->win_get,
269                                                    _("IDS_ST_BODY_NETWORK"),
270                                                    dgettext("sys_string",
271                                                             "IDS_COM_BODY_BACK"),
272                                                    NULL,//_("IDS_COM_BODY_HELP"),
273                                                    setting_network_main_click_softkey_back_cb,
274                                                    setting_network_main_click_softkey_help_cb,
275                                                    ad, &scroller,
276                                                    &ad->navi_bar);
277
278         setting_enable_expandable_genlist(scroller, ad,
279                                           __setting_network_main_exp_cb, NULL);
280         Elm_Object_Item *item = NULL;;
281
282         item =
283             elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
284                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
285         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
286
287         int value_use_packet;
288         int err_use_packet;
289         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
290                                  &value_use_packet, &err_use_packet);
291         /** @todo check 'err_use_packet' variable for exception handling */
292         ad->data_use_packet =
293             setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
294                                              setting_network_main_item_Gendial_mouse_up_cb,
295                                              ad, SWALLOW_Type_1TOGGLE, NULL,
296                                              NULL, value_use_packet,
297                                              KeyStr_UsePacketData, NULL,
298                                              setting_network_main_chk_btn_cb);
299         if (ad->data_use_packet) {
300                 ad->data_use_packet->userdata = ad;
301         } else {
302                 SETTING_TRACE_ERROR("ad->data_use_packet is NULL");
303         }
304
305         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
306                                          ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
307                                          NULL, NULL, 0, Data_packet_Desc, NULL,
308                                          NULL);
309         elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
310                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
311
312         /* data roaming */
313         int value_data_roaming = 0;
314         int err_data_roaming = 0;
315         setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
316                                  &value_data_roaming, &err_data_roaming);
317         if (err_data_roaming != 0) {
318                 SETTING_TRACE_ERROR("get vconf failed");
319         }
320         ad->data_roaming = setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
321                                                             setting_network_main_item_Gendial_mouse_up_cb,
322                                                             ad, SWALLOW_Type_1TOGGLE, NULL,
323                                                             NULL, value_data_roaming,
324                                                             KeyStr_DataRoaming, NULL,
325                                                             setting_network_main_chk_btn_cb);
326         if (ad->data_roaming) {
327                 ad->data_roaming->userdata = ad;
328 #ifdef SUPPORT_MDM
329                 if(ad->mdm_server_state == MDM_RESULT_SUCCESS)
330                 {
331                         if (ad->roaming_policy_status == MDM_ALLOWED)
332                         {
333                                 setting_enable_genlist_item(ad->data_roaming->item);
334                         }
335                         else if (ad->roaming_policy_status == MDM_RESTRICTED)
336                         {
337                                 setting_disable_genlist_item(ad->data_roaming->item);
338                                 setting_create_popup_without_btn(ad, ad->ly_main, NULL, MDM_POLICY_DATA_ROAMING_RESTRICTED_STR,
339                                           NULL, POPUP_INTERVAL, FALSE, FALSE);
340                         }
341                 }
342 #endif
343         } else {
344                 SETTING_TRACE_ERROR("ad->data_roaming is NULL");
345         }
346
347         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
348                                          ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
349                                          NULL, NULL, 0, SETTING_NETWORK_DATA_ROMING_DESC, NULL,
350                                          NULL);
351         elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
352                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
353
354
355         /* (void)setting_create_Gendial_field_titleItem(scroller, &(ad->itc_group_item), speciliztion, NULL); */
356
357         /*  Don't need to check flight mode,if flight mode is on, thw whole Network function will be disable*/
358         /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
359         ad->sel_net = TAPI_NETWORK_SELECTIONMODE_AUTOMATIC;
360         ad->sel_act = TAPI_NETWORK_SYSTEM_NO_SRV;
361         vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net);
362         vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act);
363
364         FREE(ad->sel_network);
365         ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
366         SETTING_TRACE("pa_sel_net_name:%s", ad->sel_network);
367         if (isEmptyStr(ad->sel_network)) {
368             ad->sel_network = strndup("IDS_ST_BODY_NOSERVICE", strlen("IDS_ST_BODY_NOSERVICE")+1);
369         }
370         SETTING_TRACE("pa_net_name:%s", ad->sel_network);
371         SETTING_TRACE("old act:%d", ad->sel_act);
372         SETTING_TRACE("old network mode:%d", ad->sel_net);
373
374         char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
375         if (TAPI_NETWORK_SELECTIONMODE_MANUAL == value) {
376                 snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
377                          "%s, %s (%s)", _("IDS_COM_BODY_MANUAL"), _(ad->sel_network),
378                          setting_network_get_act_str(ad->sel_act));
379         }
380         else{
381                 snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
382                          "%s, %s", _("IDS_COM_BODY_AUTOMATIC"), _(ad->sel_network));
383         }
384
385         ad->data_sel_net = setting_create_Gendial_field_def(scroller,
386                                      &itc_2text_3,
387                                      setting_network_main_item_Gendial_mouse_up_cb,
388                                      ad, SWALLOW_Type_INVALID,
389                                      NULL, NULL, 0,
390                                      "IDS_ST_BODY_SELECT_NETWORK",
391                                      sel_network_desc, NULL);
392         if (ad->data_sel_net) {
393                 ad->data_sel_net->userdata = ad;
394         } else {
395                 SETTING_TRACE_ERROR("ad->data_sel_net is NULL");
396         }
397         /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
398         /* hide NETWORK MODE in Emulator*/
399         char *sub_des = NULL;
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