61c6cd84b9a3d1b1041f3de3812872a36d9ee39d
[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,
307                                          NULL, NULL, 0, Data_packet_Desc, NULL,
308                                          NULL);
309
310         /* data roaming */
311         int value_data_roaming = 0;
312         int err_data_roaming = 0;
313         setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
314                                  &value_data_roaming, &err_data_roaming);
315         if (err_data_roaming != 0) {
316                 SETTING_TRACE_ERROR("get vconf failed");
317         }
318         ad->data_roaming = setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
319                                                             setting_network_main_item_Gendial_mouse_up_cb,
320                                                             ad, SWALLOW_Type_1TOGGLE, NULL,
321                                                             NULL, value_data_roaming,
322                                                             KeyStr_DataRoaming, NULL,
323                                                             setting_network_main_chk_btn_cb);
324         if (ad->data_roaming) {
325                 ad->data_roaming->userdata = ad;
326 #ifdef SUPPORT_MDM
327                 if(ad->mdm_server_state == MDM_RESULT_SUCCESS)
328                 {
329                         if (ad->roaming_policy_status == MDM_ALLOWED)
330                         {
331                                 setting_enable_genlist_item(ad->data_roaming->item);
332                         }
333                         else if (ad->roaming_policy_status == MDM_RESTRICTED)
334                         {
335                                 setting_disable_genlist_item(ad->data_roaming->item);
336                                 setting_create_popup_without_btn(ad, ad->ly_main, NULL, MDM_POLICY_DATA_ROAMING_RESTRICTED_STR,
337                                           NULL, POPUP_INTERVAL, FALSE, FALSE);
338                         }
339                 }
340 #endif
341         } else {
342                 SETTING_TRACE_ERROR("ad->data_roaming is NULL");
343         }
344
345         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
346                                          ad, SWALLOW_Type_LAYOUT_SPECIALIZTION,
347                                          NULL, NULL, 0, SETTING_NETWORK_DATA_ROMING_DESC, NULL,
348                                          NULL);
349
350
351         /* (void)setting_create_Gendial_field_titleItem(scroller, &(ad->itc_group_item), speciliztion, NULL); */
352
353         /*  check flight mode */
354         int flight_mode, err;
355         setting_get_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE, &flight_mode,
356                                  &err);
357         /** @todo check 'err' variable for exception handling */
358         SETTING_TRACE("flight_mode:%d", flight_mode);
359         char *sub_des = NULL;
360         if (flight_mode == 0) {
361                 /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
362                 ad->sel_net = TAPI_NETWORK_SELECTIONMODE_AUTOMATIC;
363                 ad->sel_act = TAPI_NETWORK_SYSTEM_NO_SRV;
364                 vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net);
365                 vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act);
366                 
367                 FREE(ad->sel_network);
368                 ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
369                 SETTING_TRACE("pa_sel_net_name:%s", ad->sel_network);
370                 if (NULL == ad->sel_network) {
371                     ad->sel_network = strndup("IDS_ST_BODY_NOSERVICE", strlen("IDS_ST_BODY_NOSERVICE")+1);
372                 }
373                 SETTING_TRACE("pa_net_name:%s", ad->sel_network);
374                 SETTING_TRACE("old act:%d", ad->sel_act);
375                 SETTING_TRACE("old network mode:%d", ad->sel_net);
376
377                 char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
378                 if (TAPI_NETWORK_SELECTIONMODE_MANUAL == value) {
379                         snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
380                                  "%s. %s (%s)", _("IDS_COM_BODY_MANUAL"), _(ad->sel_network),
381                                  setting_network_get_act_str(ad->sel_act));
382                 }
383                 else{
384                         snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
385                                  "%s. %s", _("IDS_COM_BODY_AUTOMATIC"), _(ad->sel_network));
386                 }
387
388                 ad->data_sel_net = setting_create_Gendial_field_def(scroller,
389                                              &itc_2text_3,
390                                              setting_network_main_item_Gendial_mouse_up_cb,
391                                              ad, SWALLOW_Type_INVALID,
392                                              NULL, NULL, 0,
393                                              "IDS_ST_BODY_SELECT_NETWORK",
394                                              sel_network_desc, NULL);
395                 if (ad->data_sel_net) {
396                         ad->data_sel_net->userdata = ad;
397                 } else {
398                         SETTING_TRACE_ERROR("ad->data_sel_net is NULL");
399                 }
400         }
401         /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
402         /* hide NETWORK MODE in Emulator*/
403         k = vconf_get_int(VCONFKEY_SETAPPL_NETWORK_MODE_INT, &value);
404         if (-1 != k) {
405                 SETTING_TRACE("value:%d", value);
406                 switch (value) {
407                 case TAPI_NETWORK_BAND_TYPE_ANY:
408                         sub_des = _("IDS_COM_BODY_AUTOMATIC");
409                         break;
410                 case TAPI_NETWORK_BAND_TYPE_GSM_900_1800:
411                         sub_des = _(STR_SETTING_GSM_900_1800);
412                         break;
413                 case TAPI_NETWORK_BAND_TYPE_GSM_850_1900:
414                         sub_des = _(STR_SETTING_GSM_850_1900);
415                         break;
416                 case TAPI_NETWORK_BAND_TYPE_WCDMA:
417                         sub_des = _(STR_SETTING_UMTS);
418                         break;
419                 default:
420                         break;
421                 }
422         }
423
424         ad->data_net_mode =
425             setting_create_Gendial_exp_parent_field(scroller,
426                                                     &itc_2text_3_parent,
427                                                     NULL, NULL,
428                                                     SWALLOW_Type_INVALID,
429                                                     "IDS_ST_BODY_NETWORK_MODE",
430                                                     sub_des);
431         if (ad->data_net_mode) {
432                 ad->data_net_mode->int_slp_setting_binded =
433                         INT_SLP_SETTING_NETWORK_MODE;
434                 ad->data_net_mode->userdata = ad;
435         } else {
436                 SETTING_TRACE_ERROR("ad->data_back is NULL");
437         }
438
439         setting_create_Gendial_field_def(scroller, &itc_1text,
440                                          setting_network_main_item_Gendial_mouse_up_cb,
441                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
442                                          0, CONNECTION_DSC,
443                                          NULL, NULL);
444 #if DISABLED_CODE
445         setting_create_Gendial_field_def(scroller, &itc_1text,
446                                          setting_network_main_item_Gendial_mouse_up_cb,
447                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
448                                          0, "IDS_ST_BODY_INTERNET_CONNECTION",
449                                          NULL, NULL);
450         setting_create_Gendial_field_def(scroller, &itc_1text,
451                                          setting_network_main_item_Gendial_mouse_up_cb,
452                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
453                                          0, STR_SETTING_MMS_CONNECTIONS, NULL,
454                                          NULL);
455 #ifdef ENABLED_PREFERRED_NETWORKS
456         setting_create_Gendial_field_def(scroller, &itc_1text,
457                                          setting_network_main_item_Gendial_mouse_up_cb,
458                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
459                                          0, "IDS_ST_BODY_PREFERRED_NETWORKS",
460                                          NULL, NULL);
461 #endif
462 #ifdef ENABLED_2G3G_NETWORK
463         /*  create 3g connection option */
464         setting_create_Gendial_field_def(scroller, &itc_1text,
465                                          setting_network_main_item_Gendial_mouse_up_cb,
466                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
467                                          0, "2G/3G Connection", NULL, NULL);
468
469         /* add blank rectangle */
470 #endif
471 #endif
472
473         item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
474                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
475         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
476
477         setting_view_network_main.is_create = 1;
478         return SETTING_RETURN_SUCCESS;
479 }
480
481 static int setting_network_main_destroy(void *cb)
482 {
483         /* error check */
484         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
485
486         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
487
488         if (ad->ly_main != NULL) {
489                 evas_object_del(ad->ly_main);
490         }
491         ad->data_sel_net = NULL;//reset NULL after genlis destoryed with ly_main.
492
493         setting_view_network_main.is_create = 0;
494         return SETTING_RETURN_SUCCESS;
495 }
496
497 static int setting_network_main_update(void *cb)
498 {
499         SETTING_TRACE_BEGIN;
500         /* error check */
501         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
502
503         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
504
505         if (ad->ly_main != NULL) {
506
507                 evas_object_show(ad->ly_main);
508         }
509         SETTING_TRACE_END;
510
511         return SETTING_RETURN_SUCCESS;
512 }
513
514 static int setting_network_main_cleanup(void *cb)
515 {
516         /* error check */
517         /* retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER); */
518
519         /* SettingNetworkUG *ad = (SettingNetworkUG *)cb; */
520
521         /* all the view in view stack shared the ad->ly_main, it cannot be hided!!! */
522         /* if(ad->ly_main != NULL) */
523         /* { */
524         /* evas_object_hide(ad->ly_main); */
525         /* } */
526
527         return SETTING_RETURN_SUCCESS;
528 }
529
530 /* ***************************************************
531  *
532  *general func
533  *
534  ***************************************************/
535
536 /* ***************************************************
537  *
538  *call back func
539  *
540  ***************************************************/
541
542 static void
543 setting_network_main_click_softkey_help_cb(void *data, Evas_Object *obj,
544                                            void *event_info)
545 {
546         SETTING_TRACE_BEGIN;
547         /* error check */
548         retm_if(data == NULL, "Data parameter is NULL");
549
550         SettingNetworkUG *ad = (SettingNetworkUG *) data;
551         setting_view_change(&setting_view_network_main,
552                             &setting_view_network_main_help, ad);
553 }
554
555 static void
556 setting_network_main_click_softkey_back_cb(void *data, Evas_Object *obj,
557                                            void *event_info)
558 {
559         SETTING_TRACE_BEGIN;
560         /* error check */
561         retm_if(data == NULL, "Data parameter is NULL");
562
563         SettingNetworkUG *ad = (SettingNetworkUG *) data;
564         /* Send destroy request */
565         ug_destroy_me(ad->ug);
566 }
567
568 static void
569 setting_network_main_item_Gendial_mouse_up_cb(void *data, Evas_Object *obj,
570                                               void *event_info)
571 {
572         SETTING_TRACE_BEGIN;
573         /* error check */
574         setting_retm_if(data == NULL, "Data parameter is NULL");
575         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
576         elm_genlist_item_selected_set(item, 0);
577         Setting_GenGroupItem_Data *list_item =
578             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
579
580         SettingNetworkUG *ad = (SettingNetworkUG *) data;
581
582         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
583         int ret;
584
585         if (!safeStrCmp("IDS_ST_BODY_SELECT_NETWORK", list_item->keyStr)) {
586                 ret =
587                     setting_view_change(&setting_view_network_main,
588                                         &setting_view_network_select_network,
589                                         ad);
590         } else
591             if (!safeStrCmp
592                 ("IDS_ST_BODY_INTERNET_CONNECTION", list_item->keyStr)) {
593
594                 ad->con_type = NET_SERVICE_INTERNET;
595                 ret =
596                     setting_view_change(&setting_view_network_main,
597                                         &setting_view_network_connection_create,
598                                         ad);
599         } else if (!safeStrCmp(STR_SETTING_MMS_CONNECTIONS, list_item->keyStr)) {
600                 ad->con_type = NET_SERVICE_MMS;
601
602                 ret =
603                     setting_view_change(&setting_view_network_main,
604                                         &setting_view_network_connection_create,
605                                         ad);
606         }
607 #ifdef ENABLED_PREFERRED_NETWORKS
608         else if (!safeStrCmp("IDS_ST_BODY_PREFERRED_NETWORKS",
609                                 list_item->keyStr)) {
610
611                 int value = -1;
612                 int err = -1;
613                 ret =
614                     setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value,
615                                             &err);
616                         /** @todo check 'err' variable for exception handling */
617                 SETTING_TRACE("INT_SLP_SETTING_SIM_SLOT value:%d", value);
618                 switch (value) {
619                 case VCONFKEY_TELEPHONY_SIM_INSERTED:
620                         /* To Recreate the view in order to search the perferred network again. */
621                         /* ret = setting_view_destroy(&setting_view_network_preferred_network, ad); */
622                         ret =
623                             setting_view_change(&setting_view_network_main,
624                                                 &setting_view_network_preferred_network,
625                                                 ad);
626
627                         break;
628
629                 case VCONFKEY_TELEPHONY_SIM_NOT_PRESENT:
630
631                         setting_create_simple_popup(NULL, ad->win_get,
632                                                     NULL, _("IDS_ST_SECURITY_BODY_NOIMSI"));
633                         SETTING_TRACE_DEBUG
634                             ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
635                              SETTING_FONT_RED, value, SETTING_FONT_BLACK);
636                         return;
637
638                         break;
639
640                 case VCONFKEY_TELEPHONY_SIM_CARD_ERROR:
641                 case VCONFKEY_TELEPHONY_SIM_UNKNOWN:
642
643                         setting_create_simple_popup(NULL, ad->win_get,
644                                                     NULL, _("IDS_COM_BODY_INVALID_SIM_CARD"));
645                         SETTING_TRACE_DEBUG
646                             ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
647                              SETTING_FONT_RED, value, SETTING_FONT_BLACK);
648                         return;
649
650                         break;
651                 default:
652                         SETTING_TRACE("Unknown SIM information from vconf");
653                         break;
654                 }
655         }
656 #endif
657 #ifdef ENABLED_2G3G_NETWORK
658         else if (!safeStrCmp("2G/3G Connection", list_item->keyStr)) {
659                 ret =
660                     setting_view_change(&setting_view_network_main,
661                                         &setting_view_network_3gcon, ad);
662         }
663 #endif
664         else if (!safeStrCmp(KeyStr_UsePacketData, list_item->keyStr)) {
665                 int old_status = elm_check_state_get(list_item->eo_check);
666                 /* new status */
667                 list_item->chk_status = !old_status;
668                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
669                 if (!list_item->chk_status) {
670                         ad->popup =
671                             setting_create_popup_with_btn(ad, ad->win_get,
672                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_OFF_DESC),
673                                                  setting_network_use_packet_resp_cb,
674                                                  0, 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
675                 } else {
676                         ad->popup =
677                             setting_create_popup_with_btn(ad, ad->win_get,
678                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_ON_DESC),
679                                                  setting_network_use_packet_resp_cb,
680                                                  0, 1, _("IDS_COM_SK_OK"));
681                 }
682
683         } else if (!safeStrCmp(KeyStr_DataRoaming, list_item->keyStr)) {
684                 int old_status = elm_check_state_get(list_item->eo_check);
685                 /* new status */
686                 list_item->chk_status = !old_status;
687                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
688
689                 char *notify_str = NULL;
690                 if (!list_item->chk_status) {
691                         notify_str = SETTING_NETWORK_DATA_ROMING_OFF_DESC;
692                         ad->popup = setting_create_popup_with_btn(ad, ad->win_get,
693                                                           NULL, notify_str,
694                                                           __setting_network_data_roaming_resp_cb, 0,
695                                                           1, _("IDS_COM_SK_OK"));
696                 } else {
697                         int err = 0;
698                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
699                                                  SETTING_ON_OFF_BTN_ON, &err);
700                         setting_retm_if(err != 0, "set vconf failed");
701
702                         /* should set use_packet_data as same as the status of data_roming */
703                         int value = 0;
704                         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &value, &err);
705                         setting_retm_if(err != 0, "get vconf failed");
706                         if (!value) {
707                                 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
708                                                          SETTING_ON_OFF_BTN_ON, &err);
709                                 setting_retm_if(err != 0, "set vconf failed");
710
711                                 elm_check_state_set(ad->data_use_packet->eo_check, 1);
712                                 ad->data_use_packet->chk_status = 1;
713                         }
714                 }
715         } else if(!safeStrCmp(CONNECTION_DSC, list_item->keyStr)) {
716                 ret = setting_view_change(&setting_view_network_main,
717                                         &setting_view_network_con, ad);
718         }
719 }
720
721 static void
722 setting_network_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
723 {
724         SETTING_TRACE_BEGIN;
725         /* error check */
726         retm_if(data == NULL, "Data parameter is NULL");
727         SettingNetworkUG *ad = NULL;
728         Setting_GenGroupItem_Data *list_item =
729             (Setting_GenGroupItem_Data *) data;
730         ad = list_item->userdata;
731         list_item->chk_status = elm_check_state_get(obj);       /*  for genlist update status */
732
733         if (obj == ad->data_use_packet->eo_check) {
734                 if (!list_item->chk_status) {
735                         ad->popup =
736                             setting_create_popup_with_btn(ad, ad->win_get,
737                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_OFF_DESC),
738                                                  setting_network_use_packet_resp_cb,
739                                                  0, 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
740                 } else {
741                         ad->popup =
742                             setting_create_popup_with_btn(ad, ad->win_get,
743                                                  NULL, _(SETTING_NETWORK_USE_PACKET_DATA_ON_DESC),
744                                                  setting_network_use_packet_resp_cb,
745                                                  0, 1, _("IDS_COM_SK_OK"));
746                 }
747         }else if (obj == ad->data_roaming->eo_check) {
748                 char *notify_str = NULL;
749                 if (!list_item->chk_status) {
750                         notify_str = SETTING_NETWORK_DATA_ROMING_OFF_DESC;
751                         ad->popup = setting_create_popup_with_btn(ad, ad->win_get,
752                                                           NULL, notify_str,
753                                                           __setting_network_data_roaming_resp_cb, 0,
754                                                           1, _("IDS_COM_SK_OK"));
755                 } else {
756                         int err = 0;
757                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
758                                                  SETTING_ON_OFF_BTN_ON, &err);
759                         setting_retm_if(err != 0, "set vconf failed");
760
761                         /* should set use_packet_data as same as the status of data_roming */
762                         int value = 0;
763                         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &value, &err);
764                         setting_retm_if(err != 0, "get vconf failed");
765                         if (!value) {
766                                 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
767                                                         SETTING_ON_OFF_BTN_ON, &err);
768                                 setting_retm_if(err != 0, "set vconf failed");
769
770                                 elm_check_state_set(ad->data_use_packet->eo_check, 1);
771                                 ad->data_use_packet->chk_status = 1;
772                         }
773                 }
774         }
775 }
776
777 static void
778 setting_network_use_packet_resp_cb(void *data, Evas_Object *obj,
779                                    void *event_info)
780 {
781         SETTING_TRACE_BEGIN;
782         retm_if(data == NULL, "Data parameter is NULL");
783
784         SettingNetworkUG *ad = (SettingNetworkUG *) data;
785         int err = 0;            /* error check   */
786         int response_type = btn_type(obj);
787
788         int value = 0;
789         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &value, &err);
790         setting_retm_if(err != 0, "get vconf failed");
791         SETTING_TRACE("value = %d", value);
792         if (POPUP_RESPONSE_OK == response_type) {
793                 if (value == 0) {
794                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
795                                                  SETTING_ON_OFF_BTN_ON, &err);
796                         setting_retm_if(err != 0, "set vconf failed");
797
798                         elm_check_state_set(ad->data_use_packet->eo_check, 1);
799                         ad->data_use_packet->chk_status = 1;
800
801                         /* if called by other apps, destroy ug */
802                         if (!safeStrCmp(ad->view_type_string, "DATA_ROAMING")) {
803                                 if (ad->popup) {
804                                         evas_object_del(ad->popup);
805                                         ad->popup = NULL;
806                                 }
807                                 ug_destroy_me(ad->ug);
808                                 return;
809                         }
810                 } else {
811                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
812                                                  SETTING_ON_OFF_BTN_OFF, &err);
813                         setting_retm_if(err != 0, "set vconf failed");
814
815                         elm_check_state_set(ad->data_use_packet->eo_check, 0);
816                         ad->data_use_packet->chk_status = 0;
817
818                         /* should set data_roming as same as status of use_packet_data */
819                         int data_roaming_value = 0;
820                         setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, &data_roaming_value, &err);
821                         setting_retm_if(err != 0, "get vconf failed");
822                         if (data_roaming_value) {
823                                 setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
824                                                          SETTING_ON_OFF_BTN_OFF, &err);
825                                 setting_retm_if(err != 0, "set vconf failed");
826
827                                 elm_check_state_set(ad->data_roaming->eo_check, 0);
828                                 ad->data_roaming->chk_status = 0;
829                         }
830                 }
831         } else if (POPUP_RESPONSE_CANCEL == response_type) {
832                 /* rollback */
833                 if (value == 1) {
834                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
835                                                  SETTING_ON_OFF_BTN_ON, &err);
836                         setting_retm_if(err != 0, "set vconf failed");
837                         elm_check_state_set(ad->data_use_packet->eo_check, 1);
838                         ad->data_use_packet->chk_status = 1;
839                 }
840         }
841         if (ad->popup)
842         {
843                 evas_object_del(ad->popup);
844                 ad->popup = NULL;
845         }
846
847 }
848
849 static void __setting_network_data_roaming_resp_cb(void *data, Evas_Object *obj,
850                                              void *event_info)
851 {
852         SETTING_TRACE_BEGIN;
853         retm_if(data == NULL, "Data parameter is NULL");
854
855         SettingNetworkUG *ad = (SettingNetworkUG *) data;
856         int response_type = btn_type(obj);
857         SETTING_TRACE("elm_object_parent_widget_get(obj):%p", elm_object_parent_widget_get(obj));
858         SETTING_TRACE("obj:%p", obj);
859         if (POPUP_RESPONSE_OK == response_type) {
860                 int value = 0;
861                 int err = 0;
862                 setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, &value, &err);
863
864                 if (value == 0) {
865                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
866                                                  SETTING_ON_OFF_BTN_ON, &err);
867                         setting_retm_if(err != 0, "set vconf failed");
868
869                         elm_check_state_set(ad->data_roaming->eo_check, 1);
870                         ad->data_roaming->chk_status = 1;
871
872                         /* if called by other apps, destroy ug */
873                         if (!safeStrCmp(ad->view_type_string, "DATA_ROAMING")) {
874                                 if (ad->popup)
875                                 {
876                                         evas_object_del(ad->popup);
877                                         ad->popup = NULL;
878                                 }
879                                 ug_destroy_me(ad->ug);
880                                 return;
881                         }
882                 } else {
883                         setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
884                                                  SETTING_ON_OFF_BTN_OFF, &err);
885                         setting_retm_if(err != 0, "set vconf failed");
886
887                         elm_check_state_set(ad->data_roaming->eo_check, 0);
888                         ad->data_roaming->chk_status = 0;
889                 }
890         }
891
892         if (ad->popup)
893         {
894                 evas_object_del(ad->popup);
895                 ad->popup = NULL;
896         }
897 }
898