b1d3ca9a12c1a424d4905cba4f9598544961b6f8
[apps/home/settings.git] / setting-network / src / setting-network.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.h>
22 #include <setting-network-preferred-network-delete.h>
23 #include <setting-network-preferred-network.h>
24 #include <setting-debug.h>
25 #include <efl_assist.h>
26 #include <setting-cfg.h>
27
28
29 #ifndef UG_MODULE_API
30 #define UG_MODULE_API __attribute__ ((visibility("default")))
31 #endif
32
33
34 const char *STR_SETTING_OPERATION_FAILED = "IDS_BT_POP_OPERATION_FAILED";
35 static Evas_Object *__create_registering_popup(void *data);
36
37 char *__get_profile_name(int conType, void *data)
38 {
39         setting_retvm_if(data == NULL, NULL, "data is NULL");
40         SettingNetworkUG *ad = (SettingNetworkUG *) data;
41         char *def_name = NULL;
42         if (CONNECTION_CELLULAR_SERVICE_TYPE_MMS == conType) {
43                 connection_profile_iterator_h profile_iter = NULL;
44                 connection_profile_h profile_h = NULL;
45
46                 char *profile_id = NULL;
47                 char *profile_name = NULL;
48                 char *apn = NULL;
49                 bool profile_bhidden = false;
50                 connection_profile_type_e profile_type = CONNECTION_PROFILE_TYPE_CELLULAR;
51                 connection_cellular_service_type_e service_type = CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
52
53                 int rv = connection_get_profile_iterator(ad->connection, CONNECTION_ITERATOR_TYPE_REGISTERED, &profile_iter);
54                 if (rv != CONNECTION_ERROR_NONE) {
55                         SETTING_TRACE_ERROR("Fail to get profile iterator [%d]", rv);
56                         return NULL;
57                 }
58
59                 int cnt = 0;
60                 while (connection_profile_iterator_has_next(profile_iter)) {
61                         if (cnt >= MAX_PROFILE_NUM) {
62                                 break;
63                         }
64                         if (connection_profile_iterator_next(profile_iter, &profile_h) != CONNECTION_ERROR_NONE) {
65                                 SETTING_TRACE_ERROR("Fail to get profile handle");
66                                 break;
67                         }
68
69                         if (connection_profile_get_type(profile_h, &profile_type) != CONNECTION_ERROR_NONE) {
70                                 SETTING_TRACE_ERROR("Fail to get profile type");
71                                 continue;
72                         }
73                         if (connection_profile_get_cellular_service_type(profile_h, &service_type) != CONNECTION_ERROR_NONE) {
74                                 SETTING_TRACE_ERROR("Fail to get service type");
75                                 continue;
76                         }
77
78                         if (connection_profile_get_name(profile_h, &profile_name) != CONNECTION_ERROR_NONE) {
79                                 SETTING_TRACE_ERROR("Fail to get profile name");
80                                 continue;
81                         }
82
83                         if (connection_profile_is_cellular_hidden(profile_h, &profile_bhidden) != CONNECTION_ERROR_NONE) {
84                                 SETTING_TRACE_ERROR("Fail to get profile hidden attr (true/false)");
85                                 continue;
86                         }
87
88                         if (connection_profile_get_cellular_apn(profile_h, &apn) != CONNECTION_ERROR_NONE) {
89                                 SETTING_TRACE_ERROR("Fail to get apn");
90                                 G_FREE(profile_name);
91                                 continue;
92                         }
93
94                         connection_profile_get_id(profile_h, &profile_id);
95
96                         SETTING_TRACE("Record[%d:%s] profile_handle:%s, profile_id:%s, profile_name:%s, profile_type:%d, service_type:%d",
97                                       cnt, apn, profile_h, profile_id, profile_name, profile_type, service_type);
98                         if (CONNECTION_PROFILE_TYPE_CELLULAR != profile_type) {
99                                 G_FREE(apn);
100                                 G_FREE(profile_id);
101                                 G_FREE(profile_name);
102                                 continue;
103                         }
104                         if (profile_bhidden == false
105                             && CONNECTION_CELLULAR_SERVICE_TYPE_MMS == service_type) { /*unknow, match with ad->con_name */
106                                 FREE(def_name); /*keep the last one */
107                                 def_name = strdup(profile_name);
108                         } else {
109                                 SETTING_TRACE("profile hidden attribute : %d ", profile_bhidden);
110                         }
111                         G_FREE(apn);
112                         G_FREE(profile_id);
113                         G_FREE(profile_name);
114                         cnt++;
115                 }
116
117                 return def_name != NULL ? def_name : strdup(KeyStr_No_Profile);
118         }
119
120         connection_profile_h def_profile = NULL;
121         (void)connection_get_default_cellular_service_profile(ad->connection,
122                                                               conType, &def_profile);
123         if (def_profile) connection_profile_get_name(def_profile, &def_name);
124
125         def_name = def_name != NULL ? def_name : strdup(KeyStr_No_Profile);
126         return def_name;
127 }
128
129 static void __notify_response_cb(void *data, Evas_Object *obj,
130                                  void *event_info)
131 {
132         SETTING_TRACE_BEGIN;
133         setting_retm_if(!data, "!data");
134         SettingNetworkUG *ad = data;
135         if (obj) {
136                 evas_object_del(obj);
137                 obj = NULL;
138         }
139         /* Send destroy request */
140         ug_destroy_me(ad->ug);
141 }
142
143 static void __selected_network_change_cb(keynode_t *key, void *data)
144 {
145         /*SETTING_TRACE_BEGIN; */
146         setting_retm_if(!data, "!data");
147         SettingNetworkUG *ad = data;
148         char *vconf_name = vconf_keynode_get_name(key);
149
150         if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NWNAME)
151             || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_SPN_DISP_CONDITION)
152             || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_SPN_NAME)
153             || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_SVCTYPE)
154            ) {
155                 ad->sel_network = get_pa_select_network();
156                 if (!ad->sel_network) {
157                         ad->sel_network = strdup(Keystr_UNKNOWN_NETWORK);
158                 }
159
160                 if (0 != vconf_set_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, ad->sel_net)) {
161                         SETTING_TRACE_ERROR("vconf[%s] set failed");
162                 }
163
164                 if (0 != vconf_set_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, ad->sel_act)) {
165                         SETTING_TRACE_ERROR("vconf[%s] set failed");
166                 }
167
168                 setting_network_update_sel_network(ad);
169         } else if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_FLIGHT_MODE)) {
170                 SETTING_TRACE("vconf_name:%s", vconf_name);
171                 setting_create_popup_without_btn(ad, ad->ly_main, NULL, _("IDS_ST_BODY_FLIGHT_MODE_HAS_BEEN_ENABLED_NETWORK_SETTINGS_WILL_CLOSE"),
172                                                  __notify_response_cb,
173                                                  POPUP_INTERVAL * 2, TRUE, FALSE);
174
175         }
176 }
177
178
179 static void setting_network_ug_cb_resize(void *data, Evas *e,
180                                          Evas_Object *obj, void *event_info)
181 {
182         SettingNetworkUG *ad = (SettingNetworkUG *) data;
183         setting_view_update(&setting_view_network_main, ad);
184 }
185
186 static setting_view *__get_network_view_to_load(void *data, app_control_h service)
187 {
188         SETTING_TRACE_BEGIN;
189         setting_retvm_if((!data), NULL, "data is NULL");
190         SettingNetworkUG *networkUG = (SettingNetworkUG *)data;
191
192         setting_view_node_table_intialize();
193
194         if (0 == safeStrCmp(networkUG->view_type_string, "netsearch")) {
195                 setting_view_node_table_register(&setting_view_network_select_network, NULL);
196                 return &setting_view_network_select_network;
197
198         } else {
199                 setting_view_node_table_register(&setting_view_network_main, NULL);
200                 setting_view_node_table_register(&setting_view_network_select_network, &setting_view_network_main);
201                 setting_view_node_table_register(&setting_view_network_main_help, &setting_view_network_main);
202
203                 setting_view_node_table_register(&setting_view_network_con, &setting_view_network_main);
204                 setting_view_node_table_register(&setting_view_network_con_list, &setting_view_network_con);
205                 setting_view_node_table_register(&setting_view_network_connection_create, &setting_view_network_con_list);
206                 setting_view_node_table_register(&setting_view_network_profile_delete, &setting_view_network_con_list);
207                 setting_view_node_table_register(&setting_view_network_3gcon, &setting_view_network_main);
208
209                 setting_view_node_table_register(&setting_view_network_preferred_network, &setting_view_network_main);
210                 setting_view_node_table_register(&setting_view_network_preferred_network_list, &setting_view_network_preferred_network);
211                 setting_view_node_table_register(&setting_view_network_preferred_network_new, &setting_view_network_preferred_network);
212                 setting_view_node_table_register(&setting_view_network_preferred_network_edit, &setting_view_network_preferred_network);
213                 setting_view_node_table_register(&setting_view_network_preferred_network_delete, &setting_view_network_preferred_network);
214
215                 return &setting_view_network_main;
216         }
217 }
218
219
220
221 void ___popup_view_resp_cb(void *data, Evas_Object *obj, void *event_info)
222 {
223         SETTING_TRACE_BEGIN;
224         retm_if(data == NULL, "Data parameter is NULL");
225
226         SettingNetworkUG *ad = (SettingNetworkUG *) data;
227         int err = 0;            /* error check   */
228         int response_type = btn_type(obj);
229
230         int value = 0;
231         setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &value, &err);
232         setting_retm_if(err != 0, "get vconf failed");
233         SETTING_TRACE("value = %d", value);
234         if (POPUP_RESPONSE_OK == response_type) {
235                 if (value == 0) {
236                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
237                                                  SETTING_ON_OFF_BTN_ON, &err);
238                         setting_retm_if(err != 0, "set vconf failed");
239                         setting_update_gl_item_chk_status(ad->data_use_packet, 1);
240                 } else {
241                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
242                                                  SETTING_ON_OFF_BTN_OFF, &err);
243                         setting_retm_if(err != 0, "set vconf failed");
244
245                         setting_update_gl_item_chk_status(ad->data_use_packet, 0);
246
247                         /* should set data_roming as same as status of use_packet_data */
248                         int data_roaming_value = 0;
249                         setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, &data_roaming_value, &err);
250                         setting_retm_if(err != 0, "get vconf failed");
251                         if (data_roaming_value) {
252                                 setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
253                                                          SETTING_ON_OFF_BTN_OFF, &err);
254                                 setting_retm_if(err != 0, "set vconf failed");
255                                 setting_update_gl_item_chk_status(ad->data_roaming, SETTING_ON_OFF_BTN_OFF);
256                         }
257                 }
258         } else if (POPUP_RESPONSE_CANCEL == response_type) {
259                 /* rollback */
260                 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
261                                          value, &err);
262                 setting_retm_if(err != 0, "set vconf failed");
263                 setting_update_gl_item_chk_status(ad->data_use_packet, value);
264         }
265 #if 0
266         if (ad->popup) {
267                 evas_object_del(ad->popup);
268                 ad->popup = NULL;
269         }
270 #else
271
272         evas_object_hide(ad->popup);
273         SETTING_TRACE("ad->ug:%p", ad->ug);
274         ug_destroy_me(ad->ug);
275 #endif
276 }
277
278 static void *___load_popup_view(ui_gadget_h ug,
279                                 enum ug_mode mode, app_control_h service,
280                                 void *priv)
281 {
282         SettingNetworkUG *ad = priv;
283         char *viewtype = NULL;
284         app_control_get_extra_data(service, "viewtype", &viewtype);
285
286         /*   Test Case:
287         case 1:
288            vconftool set -t bool db/setting/3gEnabled "1" -f
289            ug-launcher -n setting-network-efl -d"viewtype,mobile_data"
290
291         case 2:
292            vconftool set -t db/setting/3gEnabled "0" -f
293            ug-launcher -n setting-network-efl -d"viewtype,mobile_data"
294         */
295         if (!safeStrCmp(viewtype, "mobile_data")) {
296                 int status = SETTING_ON_OFF_BTN_OFF;
297                 int err;
298                 setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &status, &err);
299                 if (status) {
300                         /*set to off */
301                         ad->popup =
302                             setting_create_popup_with_btn(ad, ad->win_get,
303                                                           _(KeyStr_Network_Turn_Off_Mobile_Data),
304                                                           _(KeyStr_Network_Mobile_Data_Has_Been_Disabled_Msg),
305                                                           ___popup_view_resp_cb,
306                                                           0, 2, keyStr_OK, keyStr_CANCEL);
307                 } else {
308                         /*set to on */
309                         /*
310                         int err = 0;
311                         setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
312                                                  SETTING_ON_OFF_BTN_ON, &err);*/
313                         ad->popup =
314                             setting_create_popup_with_btn(ad, ad->win_get,
315                                                           NULL, _(Data_packet_Popup_desc),
316                                                           ___popup_view_resp_cb,
317                                                           0, 2, _("IDS_ST_SK_YES"), _("IDS_ST_SK_NO"));
318                 }
319
320         }
321         if (viewtype) {
322                 FREE(viewtype);
323         }
324         return ad->popup;
325 }
326
327 static void *setting_network_ug_on_create(ui_gadget_h ug,
328                                           enum ug_mode mode, app_control_h service,
329                                           void *priv)
330 {
331         setting_retvm_if((!priv), NULL, "!priv");
332
333         SettingNetworkUG *networkUG = priv;
334         networkUG->ug = ug;
335
336         networkUG->win_main_layout = (Evas_Object *) ug_get_parent_layout(ug);
337         networkUG->win_get = (Evas_Object *) ug_get_window();
338
339         evas_object_show(networkUG->win_main_layout);
340         networkUG->evas = evas_object_evas_get(networkUG->win_main_layout);
341
342         setting_retvm_if(networkUG->win_main_layout == NULL, NULL,
343                          "cannot get main window ");
344 #if 1
345         Evas_Object *popup_view = ___load_popup_view(ug, mode, service, priv);
346         if (popup_view) {
347                 return popup_view;
348         }
349 #endif
350
351         /* init */
352         ecore_imf_init();
353
354         /*pass NULL to let TAPI access default module */
355         networkUG->handle =  tel_init(NULL);
356         if (!networkUG->handle) {
357                 SETTING_TRACE_DEBUG("%s*** [ERR] tel_init. ***%s",
358                                     SETTING_FONT_RED, SETTING_FONT_BLACK);
359         }
360
361         if (CONNECTION_ERROR_NONE != connection_create(&(networkUG->connection))) {
362                 SETTING_TRACE_ERROR("***Failed to connection_create.***");
363         }
364
365         setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
366
367         networkUG->view_type_string = NULL;
368         app_control_get_extra_data(service, "viewtype", &(networkUG->view_type_string));
369         networkUG->view_to_load = __get_network_view_to_load(networkUG, service);
370         /*SETTING_TRACE("ad->whitelist_doc:%p", networkUG->whitelist_doc); */
371         /*SETTING_TRACE("ad->whitelist_root_node:%p", networkUG->whitelist_root_node); */
372
373         /*Read information from vconf, need not check whitelist in Settings */
374         /*load_XML(WHITELIST_DIR_PATH, "whiteLists", &(networkUG->whitelist_doc),&(networkUG->whitelist_root_node)); */
375
376         /*SETTING_TRACE("ad->whitelist_doc:%p", networkUG->whitelist_doc); */
377         /*SETTING_TRACE("ad->whitelist_root_node:%p", networkUG->whitelist_root_node); */
378
379         /*  creating a view. */
380         setting_view_node_set_cur_view(networkUG->view_to_load);
381         /*fix load network ug repeatedly issue */
382         if (networkUG->view_to_load == &setting_view_network_main
383             && networkUG->view_to_load->is_create) {
384                 networkUG->view_to_load->is_create = 0;
385         }
386         setting_view_create(networkUG->view_to_load, (void *)networkUG);
387
388
389         /* register view node table */
390 #ifdef NETWORK_MODE
391         if (tel_get_network_mode(networkUG->handle, setting_tapi_get_band_cb, networkUG) != TAPI_API_SUCCESS) {
392                 SETTING_TRACE_ERROR("*** [ERR] tel_get_network_band. ***");
393         }
394 #endif
395
396         if (tel_get_network_selection_mode(networkUG->handle, setting_tapi_get_plmn_mode_cb, networkUG) != TAPI_API_SUCCESS) {
397                 SETTING_TRACE_ERROR("*** [ERR] tel_get_network_selection_mode. ***");
398         }
399
400         if (tel_get_network_serving(networkUG->handle, setting_tapi_get_serving_network_cb, networkUG) != TAPI_API_SUCCESS) {
401                 SETTING_TRACE_ERROR("*** [ERR] tel_get_network_serving. ***");
402         }
403
404         evas_object_event_callback_add(networkUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_network_ug_cb_resize, networkUG);
405
406         (void)vconf_notify_key_changed(VCONFKEY_TELEPHONY_NWNAME, __selected_network_change_cb, networkUG);
407         (void)vconf_notify_key_changed(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, __selected_network_change_cb, networkUG);
408         (void)vconf_notify_key_changed(VCONFKEY_TELEPHONY_SPN_NAME, __selected_network_change_cb, networkUG);
409         (void)vconf_notify_key_changed(VCONFKEY_TELEPHONY_SVCTYPE, __selected_network_change_cb, networkUG);
410         (void)vconf_notify_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE, __selected_network_change_cb, networkUG);
411
412         return networkUG->ly_main;
413 }
414
415
416 static void setting_network_ug_on_start(ui_gadget_h ug, app_control_h service,
417                                         void *priv)
418 {
419         setting_retm_if((!priv), "!priv");
420
421         SettingNetworkUG *ad = priv;
422         ad->apn_internet = __get_profile_name(CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET, ad);
423         ad->apn_MMS = __get_profile_name(CONNECTION_CELLULAR_SERVICE_TYPE_MMS, ad);
424
425 }
426
427 static void setting_network_ug_on_pause(ui_gadget_h ug, app_control_h service,
428                                         void *priv)
429 {
430 }
431
432 static void setting_network_ug_on_resume(ui_gadget_h ug, app_control_h service,
433                                          void *priv)
434 {
435 }
436
437 static void setting_network_ug_on_destroy(ui_gadget_h ug, app_control_h service,
438                                           void *priv)
439 {
440         SETTING_TRACE_BEGIN;
441         setting_retm_if((!priv), "!priv");
442         SettingNetworkUG *networkUG = priv;
443         /*unload_XML(&(networkUG->whitelist_doc), &(networkUG->whitelist_root_node)); */
444
445         (void)vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NWNAME, __selected_network_change_cb);
446         (void)vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, __selected_network_change_cb);
447         (void)vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SPN_NAME, __selected_network_change_cb);
448         (void)vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SVCTYPE, __selected_network_change_cb);
449         (void)vconf_ignore_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE, __selected_network_change_cb);
450
451         evas_object_event_callback_del(networkUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_network_ug_cb_resize); /* fix flash issue for gallery */
452         networkUG->ug = ug;
453
454         if (networkUG->view_type_string)
455                 FREE(networkUG->view_type_string);
456         G_FREE(networkUG->ed_pxy_addr_desc);
457         G_FREE(networkUG->ed_pxy_port_desc);
458         FREE(networkUG->sel_network);
459         FREE(networkUG->access_name);
460         FREE(networkUG->con_name);
461         FREE(networkUG->apn_internet);
462         FREE(networkUG->apn_MMS);
463         /* release */
464         ecore_imf_shutdown();
465
466         /*  unregister dnet client */
467         if (networkUG->connection) {
468                 connection_destroy(networkUG->connection);
469                 networkUG->connection = NULL;
470         }
471
472         if (networkUG->handle && tel_deinit(networkUG->handle) != TAPI_API_SUCCESS) {
473                 SETTING_TRACE_DEBUG
474                 ("%s*** [ERR] setting_network_unsubscribe_tapi_events. ***%s",
475                  SETTING_FONT_RED, SETTING_FONT_BLACK);
476         }
477         if (networkUG->profile_list != NULL) {
478                 eina_list_free(networkUG->profile_list);
479                 networkUG->profile_list = NULL;
480         }
481
482         setting_network_popup_delete(networkUG);
483         /*  delete the allocated objects. */
484         setting_view_destroy(&setting_view_network_select_network, networkUG);
485         setting_view_destroy(&setting_view_network_main_help, networkUG);
486
487         setting_view_destroy(&setting_view_network_con, networkUG);
488         setting_view_destroy(&setting_view_network_con_list, networkUG);
489         setting_view_destroy(&setting_view_network_connection_create,
490                              networkUG);
491         setting_view_destroy(&setting_view_network_profile_delete,
492                              networkUG);
493         setting_view_destroy(&setting_view_network_3gcon, networkUG);
494
495         setting_view_destroy(&setting_view_network_preferred_network, networkUG);
496         setting_view_destroy(&setting_view_network_preferred_network_list, networkUG);
497         setting_view_destroy(&setting_view_network_preferred_network_new, networkUG);
498         setting_view_destroy(&setting_view_network_preferred_network_edit, networkUG);
499         setting_view_destroy(&setting_view_network_preferred_network_delete, networkUG);
500         setting_view_destroy(&setting_view_network_main, networkUG);
501
502         if (NULL != ug_get_layout(networkUG->ug)) {
503                 evas_object_hide((Evas_Object *) ug_get_layout(networkUG->ug));
504                 evas_object_del((Evas_Object *) ug_get_layout(networkUG->ug));
505         }
506
507         SETTING_TRACE_END;
508 }
509
510 static void setting_network_ug_on_message(ui_gadget_h ug, app_control_h msg,
511                                           app_control_h service, void *priv)
512 {
513 }
514
515 static void __update_mobile_data_on_popup(void *data)
516 {
517         SETTING_TRACE_BEGIN;
518         setting_retm_if(NULL == data, "data is NULL");
519         SettingNetworkUG *ad = (SettingNetworkUG *) data;
520         ret_if(NULL == ad->popup_data_on);
521
522         elm_object_text_set(ad->popup_data_on, _(Data_packet_Popup_desc));
523 }
524
525 static void __update_mobile_data_off_popup(void *data)
526 {
527         SETTING_TRACE_BEGIN;
528         setting_retm_if(NULL == data, "data is NULL");
529         SettingNetworkUG *ad = (SettingNetworkUG *) data;
530         ret_if(NULL == ad->popup_data_off);
531
532         char *pop_info = NULL;
533         char *pop_title = NULL;
534
535         pop_info = (char *)g_strdup(_(KeyStr_Network_Mobile_Data_Has_Been_Disabled_Msg));
536         pop_title = (char *)g_strdup(_(KeyStr_Network_Turn_Off_Mobile_Data));
537
538         elm_object_text_set(ad->popup_data_off, _(pop_info));
539
540         if (pop_title) {
541                 elm_object_part_text_set(ad->popup_data_off, "title,text", _(pop_title));
542         }
543         G_FREE(pop_title);
544 }
545
546 static void setting_network_ug_on_event(ui_gadget_h ug,
547                                         enum ug_event event, app_control_h service,
548                                         void *priv)
549 {
550         SETTING_TRACE_BEGIN;
551         SettingNetworkUG *ad = (SettingNetworkUG *) priv;
552
553         switch (event) {
554                 case UG_EVENT_LOW_MEMORY:
555                         break;
556                 case UG_EVENT_LOW_BATTERY:
557                         break;
558                 case UG_EVENT_LANG_CHANGE:
559                         if (ad->genlist && setting_view_network_main.is_create) {
560                                 /*update items */
561                                 elm_genlist_realized_items_update(ad->genlist);
562                                 Elm_Object_Item *item = NULL;
563                                 Setting_GenGroupItem_Data *item_data = NULL;
564                                 if (ad->data_use_packet) {
565                                         item = elm_genlist_item_next_get(ad->data_use_packet->item);
566                                         if (item) {
567                                                 item = elm_genlist_item_next_get(item);
568                                         }
569                                         if (item) {
570                                                 item_data = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
571                                         }
572                                 }
573                                 if (item_data) {
574                                         const char *title = Data_packet_Sub_desc;
575                                         item_data->keyStr = strdup(title);
576                                         elm_object_item_data_set(item_data->item, item_data);
577                                         elm_genlist_item_update(item_data->item);
578                                 }
579 #ifdef NETWORK_MODE
580                                 /*update sub text */
581                                 if (ad->handle && tel_get_network_mode(ad->handle, setting_tapi_get_band_cb, ad) != TAPI_API_SUCCESS) {
582                                         SETTING_TRACE_ERROR("*** [ERR] tel_get_network_band. ***");
583                                 }
584                                 setting_network_update_sel_network(ad);
585 #endif
586                                 /*update title */
587                                 Elm_Object_Item *navi_it = elm_naviframe_bottom_item_get(ad->navi_bar);
588                                 ret_if(!navi_it);
589                                 elm_object_item_text_set(navi_it, _("IDS_ST_BODY_NETWORK"));
590                                 /*update popup */
591                                 __update_mobile_data_on_popup(ad);
592                                 __update_mobile_data_off_popup(ad);
593                         }
594                         break;
595                 case UG_EVENT_ROTATE_PORTRAIT:
596                         break;
597                 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
598                         break;
599                 case UG_EVENT_ROTATE_LANDSCAPE:
600                         break;
601                 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
602                         break;
603                 case UG_EVENT_REGION_CHANGE:
604                         break;
605                 default:
606                         break;
607         }
608 }
609
610 static void setting_network_ug_on_key_event(ui_gadget_h ug,
611                                             enum ug_key_event event,
612                                             app_control_h service, void *priv)
613 {
614         SETTING_TRACE_BEGIN;
615         SettingNetworkUG *ad = (SettingNetworkUG *) priv;
616
617         switch (event) {
618                 case UG_KEY_EVENT_END: {
619                                 /* setting_network_popup_delete(ad); */
620                                 if (elm_naviframe_top_item_get(ad->navi_bar) ==
621                                     elm_naviframe_bottom_item_get(ad->navi_bar)) {
622                                         ug_destroy_me(ug);
623                                 } else {
624                                         /* elm_naviframe_item_pop(ad->navi_bar); */
625                                         setting_view_cb_at_endKey(ad);
626                                 }
627                         }
628                         break;
629                 default:
630                         break;
631         }
632 }
633
634 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
635 {
636         SETTING_TRACE_BEGIN;
637         SettingNetworkUG *networkUG = calloc(1, sizeof(SettingNetworkUG));
638         setting_retvm_if(!networkUG, -1, "Create SettingNetworkUG obj failed");
639
640 #if SUPPORT_TETHERING
641         networkUG->th_main = NULL;
642         networkUG->th_connections = NULL;
643         networkUG->th_conlists = NULL;
644         networkUG->th_concreate = NULL;
645 #endif
646
647         ops->create = setting_network_ug_on_create;
648         ops->start = setting_network_ug_on_start;
649         ops->pause = setting_network_ug_on_pause;
650         ops->resume = setting_network_ug_on_resume;
651         ops->destroy = setting_network_ug_on_destroy;
652         ops->message = setting_network_ug_on_message;
653         ops->event = setting_network_ug_on_event;
654         ops->key_event = setting_network_ug_on_key_event;
655         ops->priv = networkUG;
656         ops->opt = UG_OPT_INDICATOR_ENABLE;
657
658         return 0;
659 }
660
661 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
662 {
663         SETTING_TRACE_BEGIN;
664         struct SettingNetworkUG *networkUG;
665         setting_retm_if(!ops, "ops == NULL");
666
667         networkUG = ops->priv;
668         FREE(networkUG);
669 }
670
671 /* ***************************************************
672  *
673  *general func
674  *
675  ***************************************************/
676 void setting_network_popup_delete(void *data)
677 {
678         SETTING_TRACE_BEGIN;
679         /* error check */
680         retm_if(data == NULL,
681                 "setting_network_tapi_popup_create Data parameter is NULL");
682         SettingNetworkUG *ad = (SettingNetworkUG *) data;
683         if (ad->network_select_registering_pop != NULL) {
684                 evas_object_del(ad->network_select_registering_pop);
685                 ad->network_select_registering_pop = NULL;
686         }
687         if (ad->network_ug_pop != NULL) {
688                 evas_object_del(ad->network_ug_pop);
689                 ad->network_ug_pop = NULL;
690         }
691         if (ad->popup != NULL) {
692                 evas_object_del(ad->popup);
693                 ad->popup = NULL;
694         }
695 }
696
697 /* ***************************************************
698  *
699  *call back func
700  *
701  ***************************************************/
702 #ifdef NETWORK_MODE
703 /**
704  * @see also setting_tapi_set_band_cb
705  * @see also tel_get_network_mode
706  */
707 void setting_tapi_get_band_cb(TapiHandle *handle, int result, void *data, void *user_data)
708 {
709         SETTING_TRACE_BEGIN;
710         SETTING_TRACE(" - result = 0x%x", result);
711         ret_if(!user_data);
712         SettingNetworkUG *ad = user_data;
713
714         if (ad->network_ug_pop) {
715                 evas_object_del(ad->network_ug_pop);
716                 ad->network_ug_pop = NULL;
717         }
718
719         if (result == TAPI_NETWORK_NO_ERR) {
720                 int band;
721                 int temp_net_mode = 0;
722                 memcpy(&band, data, sizeof(int));
723
724                 SETTING_TRACE("tel_get_network_mode() callback received, band=%d", band);
725
726                 temp_net_mode = band;
727
728                 /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 modify */
729                 ad->net_mode = temp_net_mode;
730
731                 const char *sub_desc = NULL;
732                 /* Need to fix */
733                 char *szCscFeatureValue = "all_numeric";
734
735                 switch (ad->net_mode) {
736                         case TAPI_NETWORK_MODE_AUTO:
737                         case TAPI_NETWORK_MODE_LTE|TAPI_NETWORK_MODE_WCDMA|TAPI_NETWORK_MODE_GSM:
738                                 if (is_lte_on_feature(ad)) {
739                                         if (strcmp(szCscFeatureValue, "all_numeric") == 0)
740                                                 sub_desc = _("IDS_ST_OPT_4G_3G_2G_HAUTO_CONNECT");
741                                         else
742                                                 sub_desc = _("IDS_ST_OPT_LTE_WCDMA_GSM_HAUTO_CONNECT");
743                                 }
744                                 break;
745                         case TAPI_NETWORK_MODE_WCDMA|TAPI_NETWORK_MODE_GSM:
746                                 if (strcmp(szCscFeatureValue, "all_numeric") == 0)
747                                         sub_desc = _("IDS_ST_OPT_3G_2G_HAUTO_CONNECT");
748                                 else
749                                         sub_desc = _("IDS_ST_OPT_WCDMA_GSM_HAUTO_CONNECT");
750                                 break;
751                         case TAPI_NETWORK_MODE_WCDMA:
752                                 if (strcmp(szCscFeatureValue, "all_numeric") == 0)
753                                         sub_desc = _("IDS_ST_BODY_3G_ONLY");
754                                 else
755                                         sub_desc = _("IDS_ST_MBODY_WCDMA_ONLY");
756                                 break;
757                         case TAPI_NETWORK_MODE_GSM:
758                                 if (strcmp(szCscFeatureValue, "all_numeric") == 0)
759                                         sub_desc = _("IDS_ST_OPT_2G_ONLY");
760                                 else
761                                         sub_desc = _("IDS_ST_MBODY_GSM_ONLY");
762                                 break;
763                                 /* for docomo */
764                         case TAPI_NETWORK_MODE_LTE|TAPI_NETWORK_MODE_WCDMA:
765                                 sub_desc = _(Keystr_NetBrand_LTE_WCDMA);
766                                 break;
767                         default:
768                                 break;
769                 }
770
771                 if (ad->data_net_mode) {
772                         ad->data_net_mode->sub_desc = (char *)g_strdup(sub_desc);
773                         elm_object_item_data_set(ad->data_net_mode->item, ad->data_net_mode);
774                         elm_genlist_item_update(ad->data_net_mode->item);
775                         elm_genlist_item_expanded_set(ad->data_net_mode->item, FALSE);
776                 }
777
778                 vconf_set_int(VCONFKEY_SETAPPL_NETWORK_MODE_INT, ad->net_mode);
779                 /*} */
780                 /*  ****END****  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 modify */
781         } else {
782                 SETTING_TRACE("tel_get_network_mode() callback error(%d)", result);
783         }
784 }
785
786 /**
787  * @see also tel_set_network_mode : registers this callback function
788  */
789 void setting_tapi_set_band_cb(TapiHandle *handle, int result, void *data, void *user_data)
790 {
791         SETTING_TRACE_BEGIN;
792         SETTING_TRACE(" - result = 0x%x  , %d", result, result);
793         ret_if(!user_data);
794         SettingNetworkUG *ad = user_data;
795         ret_if(NULL == ad->data_net_mode);
796         if (ad->network_ug_pop) {
797                 evas_object_del(ad->network_ug_pop);
798                 ad->network_ug_pop = NULL;
799         }
800
801         if (tel_get_network_mode(ad->handle, setting_tapi_get_band_cb, ad) != TAPI_API_SUCCESS) {
802                 SETTING_TRACE_ERROR("*** [ERR] tel_get_network_band. ***");
803         }
804 }
805 #endif
806 void __back_to_previous_cb(void *data, Evas_Object *obj, void *event_info)
807 {
808         SETTING_TRACE_BEGIN;
809         retm_if(data == NULL, "Data parameter is NULL");
810         SettingNetworkUG *ad = (SettingNetworkUG *) data;
811
812         if (obj) {
813                 evas_object_del(obj);
814                 obj = NULL;
815         }
816
817         /*go back to previous view if set successfully */
818         setting_view_change(
819             &setting_view_network_select_network,
820             &setting_view_network_main, ad);
821 }
822
823 /**
824  * @see also __register_network
825  */
826 void setting_tapi_set_plmn_mode_cb(TapiHandle *handle, int result, void *data, void *user_data)
827 {
828         SETTING_TRACE_BEGIN;
829         SETTING_TRACE(" - result = 0x%x", result);
830         ret_if(!user_data);
831         SettingNetworkUG *ad = user_data;
832
833         setting_network_popup_delete(ad);
834
835         if ((TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net
836              && !ad->b_set_auto_network) ||
837             (TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net
838              && !ad->b_set_manul_network)) {
839                 /*The requeset has already been canceled, return directly*/
840                 SETTING_TRACE("The requeset has already been canceled, return directly");
841                 return;
842         }
843
844         if (result != TAPI_NETWORK_NO_ERR) { /*roolback..*/
845                 if (TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net
846                     && ad->data_auto_network_item && !ad->data_auto_network_item->chk_status) {
847                         SETTING_TRACE("Need refreshing");
848                         setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_Failed_Select_Network), NULL, 2 * POPUP_INTERVAL, FALSE, FALSE);
849 #if 0
850                         /*for issue P130920-01974, do not re-search network if failed */
851                         int tapi_ret;
852                         /*searching list */
853                         tapi_ret = tel_search_network(ad->handle, setting_tapi_search_network_cb, ad); /*ASYNC API - TAPI_EVENT_NETWORK_SEARCH_CNF */
854                         if (tapi_ret != TAPI_API_SUCCESS) { /* error handling.. */
855                                 SETTING_TRACE_DEBUG("%s*** [ERR] tel_search_network. tapi_ret=%d ***%s", SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
856                                 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(STR_SETTING_OPERATION_FAILED), NULL, POPUP_INTERVAL, FALSE, FALSE);
857                                 /* put error handler on the end of this function. */
858                                 return;
859                         }
860                         ad->b_searching_network = TRUE;
861
862                         Elm_Object_Item *item = elm_genlist_last_item_get(ad->genlist_sel_network);
863                         Setting_GenGroupItem_Data *data_item = NULL;
864                         while (item) {
865                                 data_item = elm_object_item_data_get(item);
866                                 if (data_item && 0 == safeStrCmp(data_item->keyStr, "IDS_ST_BODY_SELECT_AUTOMATICALLY")) {
867                                         break;
868                                 }
869
870                                 elm_object_item_del(item);
871                                 item = NULL;
872                                 item = elm_genlist_last_item_get(ad->genlist_sel_network);
873                         }
874                         /*no service case: */
875                         ad->data_search_network_item = setting_create_Gendial_field_1radio(
876                                                            ad->genlist_sel_network,
877                                                            &itc_1icon,
878                                                            NULL, NULL,
879                                                            SWALLOW_Type_1RADIO_1SEARCH,
880                                                            ad->chk_sel, -1, NULL, NULL);
881                         __BACK_POINTER_SET(ad->data_search_network_item);
882                         elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
883                         setting_genlist_item_groupstyle_set(ad->data_search_network_item, SETTING_GROUP_STYLE_BOTTOM);
884 #endif
885                         elm_radio_value_set(ad->chk_sel, -2);
886                 } else {
887                         /*setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Network selection failed"), NULL, 2*POPUP_INTERVAL, FALSE, FALSE); */
888                 }
889
890                 /*rollback sel_act and sel_net in setting_view_network_select_network.destroy() */
891                 if (ad->handle) tel_get_network_selection_mode(ad->handle, setting_tapi_get_plmn_mode_cb, ad);
892                 /*
893                 setting_view_change(
894                         &setting_view_network_select_network,
895                         &setting_view_network_main, ad);*/
896
897                 return;
898
899         }
900
901         if (0 != vconf_set_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, ad->sel_net)) {
902                 SETTING_TRACE_ERROR("vconf[%s] set failed");
903         }
904         if (0 != vconf_set_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, ad->sel_act)) {
905                 SETTING_TRACE_ERROR("vconf[%s] set failed");
906         }
907
908         ad->b_set_auto_network = FALSE;
909         ad->b_set_manul_network = FALSE;
910         setting_network_update_sel_network(ad);
911
912         Evas_Object *popup = elm_popup_add(ad->win_get);
913         ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
914         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
915                                          EVAS_HINT_EXPAND);
916         char r_str_text[128] = { 0, };
917         snprintf(r_str_text, 128, "<align=left>");
918         g_strlcat(r_str_text, _("IDS_ST_POP_REGISTERED"), 128);
919         g_strlcat(r_str_text, "</align>", 128);
920         elm_object_text_set(popup, r_str_text);
921         elm_popup_timeout_set(popup, 2.0);
922         evas_object_smart_callback_add(popup, "timeout", __back_to_previous_cb, ad);
923         evas_object_show(popup);
924 }
925
926 void setting_tapi_get_plmn_mode_cb(TapiHandle *handle, int result, void *data, void *user_data)
927 {
928         SETTING_TRACE_BEGIN;
929         SETTING_TRACE(" - result = 0x%x", result);
930         ret_if(!user_data);
931         SettingNetworkUG *ad = user_data;
932
933         if (result == TAPI_NETWORK_NO_ERR) {
934                 TelNetworkSelectionMode_t sel;
935                 memcpy(&sel, data, sizeof(TelNetworkSelectionMode_t));
936                 SETTING_TRACE_DEBUG("ad->sel_net[%d] %s sel[%d]", ad->sel_net, ad->sel_net == sel ? "==" : "!=", sel);
937                 if (ad->sel_net != sel) {
938                         ad->sel_net = sel;
939                         vconf_set_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, ad->sel_net);
940                         setting_network_update_sel_network(ad);
941                 }
942         } else {
943         }
944 }
945
946 #define DOCOMO_PLMN_ID "44010"
947 /**
948  *
949  */
950 void ___sort_merge_handle(void *usrdata, TelNetworkPlmnList_t *list)
951 {
952         SETTING_TRACE_BEGIN;
953         SettingNetworkUG *ad = usrdata;
954         int cnt = 0;
955         ad->plmn_info.networks_count = list->networks_count;
956         SETTING_TRACE("list->networks_count:%d", list->networks_count);
957         int idx = 0;
958         for (idx = 0; idx < list->networks_count; idx++) {
959                 SETTING_TRACE("[%d].network_name=%s, spn=%s, plmn=%s, plmn_id=%d, plmn_type=%d, access_technology=%d", idx, list->network_list[idx].network_name,
960                               list->network_list[idx].service_provider_name,
961                               list->network_list[idx].plmn, list->network_list[idx].plmn_id,
962                               list->network_list[idx].type_of_plmn,
963                               list->network_list[idx].access_technology);
964         }
965         SETTING_TRACE("*****************************************************");
966
967         int j = 0;
968         bool alread_exist = FALSE;
969         for (idx = 0; idx < list->networks_count; idx++) {
970                 alread_exist = FALSE;
971                 for (j = 0; j < cnt; j++) {
972                         if (0 == safeStrCmp(ad->plmn_info.network_list[j].network_name, list->network_list[idx].network_name)
973                             || 0 == safeStrCmp(ad->plmn_info.network_list[j].plmn, list->network_list[idx].plmn)) {
974                                 alread_exist = TRUE;
975                                 break;
976                         }
977                 }
978                 if (alread_exist) {
979                         continue;
980                 }
981                 memcpy(&(ad->plmn_info.network_list[cnt++]), &(list->network_list[idx]), sizeof(TelNetworkIdentity_t));
982         }
983
984         SETTING_TRACE("cnt:%d, list->networks_count=%d", cnt, list->networks_count);
985         SETTING_TRACE("*****************************************************");
986         SETTING_TRACE("After Sorted:");
987         ad->plmn_info.networks_count = list->networks_count = cnt;
988         for (idx = 0; idx < list->networks_count; idx++) {
989                 SETTING_TRACE("[%d]:network_name=%s,plmn=%s,plmn_id=%d,access_technology=%d", idx,
990                               ad->plmn_info.network_list[idx].network_name, ad->plmn_info.network_list[idx].plmn, ad->plmn_info.network_list[idx].plmn_id, ad->plmn_info.network_list[idx].access_technology);
991         }
992 }
993
994 /*special process for char '&', such as AT&T */
995 void __process_special_char(char *dst, const char *src)
996 {
997         char *temp1 = (char *)src;
998         char *temp2 = strchr(temp1, '&');
999         char *temp = NULL;
1000
1001         while (NULL != temp2) {
1002                 if (0 == safeStrNCmp(temp2, "&amp;", strlen("&amp;"))) {
1003                         temp = temp2 + 1;
1004                         if ('\0' == temp[0]) {
1005                                 break;
1006                         }
1007                         temp2 = strchr(temp, '&');
1008                 } else {
1009                         g_strlcat(dst, temp1, temp2 - temp1 + 1);
1010                         g_strlcat(dst, "&amp;", MAX_SPECIALIZITION_LEN);
1011                         temp1 = temp2 + 1;
1012                         if ('\0' == temp1[0]) {
1013                                 break;
1014                         }
1015                         temp2 = strchr(temp1, '&');
1016                 }
1017         }
1018         if ('\0' != temp1[0]) {
1019                 g_strlcat(dst, temp1, MAX_SPECIALIZITION_LEN);
1020         }
1021 }
1022
1023 /**
1024  * async api call - searching network list
1025  *
1026  * @see also tel_search_network
1027  */
1028 void setting_tapi_search_network_cb(TapiHandle *handle, int result, void *data, void *user_data)
1029 {
1030         ret_if(!data || !user_data);
1031         SettingNetworkUG *ad = user_data;
1032         SETTING_TRACE_BEGIN;
1033         SETTING_TRACE(" - result = %d", result);
1034         setting_network_popup_delete(ad);
1035
1036         if (!ad->b_searching_network) {
1037                 /*The requeset has already been canceled, don't do detail process*/
1038                 return;
1039         }
1040
1041         if (ad->data_search_network_item) {
1042                 /* [ UI UPDATE ]*/
1043                 elm_object_item_del(ad->data_search_network_item->item);
1044                 ad->data_search_network_item = NULL;
1045         }
1046
1047 #if 0 /*do when exit the searching view to avid this case:failed switch selected network when use packet data on */
1048         int err;
1049         if (ad->b_restore_3g_status) {
1050                 /*changing of USE_PACKET_DATA was trigged by betwork searching */
1051                 ad->b_trigged_by_searching = TRUE;
1052
1053                 ad->b_restore_3g_status = FALSE;/* reset for next time */
1054                 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
1055                                          SETTING_ON_OFF_BTN_ON, &err);
1056                 setting_update_gl_item_chk_status(ad->data_use_packet, 1);
1057         }
1058
1059         /* should set data_roming as same as status of use_packet_data */
1060         if (ad->b_restore_roaming_status) {
1061                 ad->b_restore_roaming_status = FALSE;/* reset for next time */
1062                 setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
1063                                          SETTING_ON_OFF_BTN_ON, &err);
1064                 setting_update_gl_item_chk_status(ad->data_roaming, 1);
1065         }
1066
1067 #endif
1068         ad->b_searching_network = FALSE;
1069         int valid_cnt = 0;
1070         if (result == TAPI_NETWORK_NO_ERR) {
1071                 int cnt = 0;
1072 #if 0 /*for connstructing test data */
1073                 TelNetworkPlmnList_t tl;
1074                 tl.networks_count = 9;
1075                 int i = 0;
1076                 safeCopyStr(tl.network_list[i].network_name, "AAA", TAPI_NETWORK_NAME_LEN_MAX);
1077                 safeCopyStr(tl.network_list[i].plmn, "112", 3);
1078                 tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_GSM;
1079
1080                 safeCopyStr(tl.network_list[i].network_name, "BBB", TAPI_NETWORK_NAME_LEN_MAX);
1081                 safeCopyStr(tl.network_list[i].plmn, "113", 3);
1082                 tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_LTE;
1083
1084                 safeCopyStr(tl.network_list[i].network_name, "AT&T", TAPI_NETWORK_NAME_LEN_MAX);
1085                 safeCopyStr(tl.network_list[i].plmn, "117", 3);
1086                 tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_UMTS;
1087
1088                 safeCopyStr(tl.network_list[i].network_name, "DDD", TAPI_NETWORK_NAME_LEN_MAX);
1089                 safeCopyStr(tl.network_list[i].plmn, "113", 3);
1090                 tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_LTE;
1091
1092                 safeCopyStr(tl.network_list[i].network_name, "EEE", TAPI_NETWORK_NAME_LEN_MAX);
1093                 safeCopyStr(tl.network_list[i].plmn, "118", 3);
1094                 tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_GSM;
1095
1096                 safeCopyStr(tl.network_list[i].network_name, "FFF", TAPI_NETWORK_NAME_LEN_MAX);
1097                 safeCopyStr(tl.network_list[i].plmn, "110", 3);
1098                 tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_LTE;
1099
1100                 safeCopyStr(tl.network_list[i].network_name, "NTT DOCOMO", TAPI_NETWORK_NAME_LEN_MAX);
1101                 /*tl.network_list[i].plmn_id = DOCOMO_PLMN_ID; */
1102                 safeCopyStr(tl.network_list[i].plmn, DOCOMO_PLMN_ID, sizeof(DOCOMO_PLMN_ID));
1103                 tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_UMTS;
1104
1105                 safeCopyStr(tl.network_list[i].network_name, "NTT DOCOMO", TAPI_NETWORK_NAME_LEN_MAX);
1106                 /*tl.network_list[i].plmn_id = DOCOMO_PLMN_ID; */
1107                 safeCopyStr(tl.network_list[i].plmn, DOCOMO_PLMN_ID, sizeof(DOCOMO_PLMN_ID));
1108                 tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_HSDPA;
1109
1110                 safeCopyStr(tl.network_list[i].network_name, "NTT DOCOMO", TAPI_NETWORK_NAME_LEN_MAX);
1111                 /*tl.network_list[i].plmn_id = DOCOMO_PLMN_ID; */
1112                 safeCopyStr(tl.network_list[i].plmn, DOCOMO_PLMN_ID, sizeof(DOCOMO_PLMN_ID));
1113                 tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_LTE;
1114                 ___sort_merge_handle(ad, &tl);
1115 #else
1116                 ___sort_merge_handle(ad, data);
1117 #endif
1118
1119                 Setting_GenGroupItem_Data *item_data = NULL;
1120
1121                 const char *pa_net_name = get_pa_select_network();
1122                 char *cur_plmn = NULL;
1123                 tel_get_property_string(ad->handle, TAPI_PROP_NETWORK_PLMN, &cur_plmn);
1124                 SETTING_TRACE("VCONFKEY_TELEPHONY_NWNAME:pa_net_name:%s", pa_net_name);
1125                 SETTING_TRACE("cur_plmn:%s", cur_plmn);
1126
1127                 char name[MAX_COMMON_BUFFER_LEN] = {0, };
1128                 while (cnt < ad->plmn_info.networks_count) {
1129                         SETTING_TRACE("network name from TAPI[%d]:%s --%s --(plmn=%s,plmn_id=%d,at=%s)", cnt,
1130                                       ad->plmn_info.network_list[cnt].network_name,
1131                                       ad->plmn_info.network_list[cnt].service_provider_name,
1132                                       ad->plmn_info.network_list[cnt].plmn,
1133                                       ad->plmn_info.network_list[cnt].plmn_id,
1134                                       setting_network_get_act_str(ad->plmn_info.network_list[cnt].access_technology));
1135 #if 0
1136                         if (TAPI_FORBIDDEN_PLMN == ad->plmn_info.network_list[cnt].type_of_plmn) {
1137                                 cnt++;
1138                                 continue;
1139                         }
1140 #endif
1141
1142                         /* Because of displaying selected PLMN.
1143                         if (TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net
1144                             && 0 == safeStrCmp(pa_net_name, ad->plmn_info.network_list[cnt].network_name)
1145                         {
1146                                 //already displayed.
1147                                 cnt++;
1148                                 continue;
1149                         }
1150                         */
1151
1152                         if (isSpaceStr(ad->plmn_info.network_list[cnt].network_name)) {
1153                                 /*skip empty string. */
1154                                 cnt++;
1155                                 continue;
1156                         }
1157
1158                         memset(name, 0, MAX_COMMON_BUFFER_LEN);
1159                         /* Because of displaying selected PLMN.
1160                         if (TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net
1161                             && 0 == safeStrCmp(cur_plmn, ad->plmn_info.network_list[cnt].plmn)
1162                             && 0 != safeStrCmp(_(pa_net_name), "Emergency calls only")
1163                             && 0 != safeStrCmp(_(pa_net_name), _("IDS_CALL_POP_CALLING_EMERG_ONLY"))
1164                             && 0 != safeStrCmp(_(pa_net_name), "No service")
1165                             && 0 != safeStrCmp(_(pa_net_name), "EMERGENCY")
1166                             )
1167                         {
1168                                 //cur plmn has the filter function only when it is in Manual Mode and its current network is avaliable(not "No service" ot "Emergency calls only")
1169                                 //already displayed.
1170                                 cnt++;
1171                                 continue;
1172                         }
1173                         */
1174
1175                         snprintf(name, MAX_COMMON_BUFFER_LEN, "%s",
1176                                  ad->plmn_info.network_list[cnt].network_name);
1177                         /*SETTING_TRACE("name:%s", name); */
1178                         char speciliztion[MAX_COMMON_BUFFER_LEN] = {0, };
1179                         __process_special_char(speciliztion, name);
1180
1181                         SETTING_TRACE("name:%s", speciliztion);
1182                         setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_TOP);
1183                         item_data = setting_create_Gendial_field_1radio(
1184                                         ad->genlist_sel_network,
1185                                         &itc_multiline_1text_1icon,
1186                                         setting_network_Gendial_select_plmn_cb,
1187                                         ad,
1188                                         /*SWALLOW_Type_1RADIO, */
1189                                         SWALLOW_Type_1RADIO_1TEXT,
1190                                         ad->chk_sel,
1191                                         TAPI_NETWORK_SELECTIONMODE_MANUAL + valid_cnt + 1,
1192                                         speciliztion,
1193                                         setting_network_select_network_chk_changed);
1194                         setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
1195                         if (NULL == item_data) {
1196                                 SETTING_TRACE_ERROR("Failed to calloc memory");
1197                                 cnt++;
1198                                 continue;
1199                         }
1200                         item_data->userdata = ad;
1201                         if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC != ad->sel_net
1202                             && 0 == safeStrCmp(pa_net_name, ad->plmn_info.network_list[cnt].network_name)
1203                             && ad->plmn_info.network_list[cnt].access_technology == ad->sel_act) {
1204                                 /* [ UI UPDATE ]*/
1205                                 elm_radio_value_set(ad->chk_sel, item_data->chk_status);/*let select nothing */
1206                         }
1207                         cnt++;
1208                         valid_cnt++;
1209                 }
1210                 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_BOTTOM);
1211                 FREE(pa_net_name);
1212
1213                 SETTING_TRACE("Found %d valid networks in total[%d]", valid_cnt, cnt);
1214                 /*valid_cnt = 0; for test.. */
1215                 if (valid_cnt > 0) {
1216                         /* [ UI UPDATE ]*/
1217                         setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_Searched), NULL, POPUP_INTERVAL, FALSE, FALSE);
1218                 } else { /*there is no invalid plmn nearby */
1219                         /* [ UI UPDATE ]*/
1220                         setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_No_Other_Network), NULL, POPUP_INTERVAL, FALSE, FALSE);
1221                 }
1222         } else {
1223                 /* [ UI UPDATE ]*/
1224                 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_Failed_Searched), NULL, POPUP_INTERVAL, FALSE, FALSE);
1225         }
1226         if (0 == valid_cnt && TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net && ad->data_auto_network_item) {
1227
1228                 /* [ UI UPDATE ]*/
1229                 ad->data_auto_network_item->chk_status = TRUE;
1230                 /*elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item); */
1231                 /*elm_genlist_item_item_class_update(ad->data_auto_network_item->item, &(itc_2text_1icon_6)); */
1232                 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, BLUE_COLOR, NULL);
1233                 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
1234                 FREE(sub_text);
1235                 elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
1236                 elm_genlist_item_update(ad->data_auto_network_item->item);
1237         }
1238 }
1239
1240
1241 void setting_tapi_get_serving_network_cb(TapiHandle *handle, int result, void *data, void *user_data)
1242 {
1243         SETTING_TRACE_BEGIN;
1244         SETTING_TRACE(" - result = 0x%x", result);
1245         ret_if(!user_data || !data);
1246         SettingNetworkUG *ad = user_data;
1247         TelNetworkServing_t *srv_nt = data;
1248
1249         if (result == TAPI_NETWORK_NO_ERR) {
1250                 ad->sel_act = srv_nt->act;
1251                 vconf_set_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, ad->sel_act);
1252
1253                 FREE(ad->sel_network);
1254                 /*ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME); */
1255                 ad->sel_network = get_pa_select_network();
1256                 if (!ad->sel_network) {
1257                         ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK) + 1);
1258                 }
1259                 setting_network_update_sel_network(ad);
1260         } else {
1261                 /*if failed, do nothing.. */
1262         }
1263         SETTING_TRACE_END;
1264
1265 }
1266
1267
1268 void setting_tapi_cancel_manual_search_cb(TapiHandle *handle, int result, void *data, void *user_data)
1269 {
1270         SETTING_TRACE_BEGIN;
1271         SETTING_TRACE(" - result = 0x%x", result);
1272         ret_if(!user_data);
1273         /*SettingNetworkUG *ad = user_data; */
1274 }
1275
1276 void setting_tapi_set_preferred_plmn_cb(TapiHandle *handle, int result, void *data, void *user_data)
1277 {
1278         SETTING_TRACE_BEGIN;
1279         SETTING_TRACE(" - result = 0x%x", result);
1280         ret_if(!user_data);
1281         SettingNetworkUG *ad = user_data;
1282         setting_network_popup_delete(ad);
1283
1284         if (result != TAPI_NETWORK_NO_ERR) {
1285                 switch (ad->op_type) {
1286                         case SETTING_NETWORK_PREFERRED_NETWORK_DELETE: {
1287                                         setting_network_preferred_network_delete_failed(ad);
1288                                         break;
1289                                 }
1290                         default: {
1291                                         setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_ST_POP_ERROR"), NULL, POPUP_INTERVAL, FALSE, FALSE);
1292                                         break;
1293                                 }
1294                 }
1295         } else {
1296                 int tapi_ret = TAPI_API_SUCCESS;
1297                 switch (ad->op_type) {
1298                         case SETTING_NETWORK_PREFERRED_NETWORK_NEW: {
1299                                         setting_view_change(&setting_view_network_preferred_network_new, &setting_view_network_preferred_network, ad);
1300                                         tapi_ret = tel_get_network_preferred_plmn(ad->handle, setting_tapi_get_preferred_plmn_cb, ad);
1301                                         break;
1302                                 }
1303
1304                         case SETTING_NETWORK_PREFERRED_NETWORK_LIST: {
1305
1306                                         setting_view_change(&setting_view_network_preferred_network_list, &setting_view_network_preferred_network, ad);
1307                                         tapi_ret = tel_get_network_preferred_plmn(ad->handle, setting_tapi_get_preferred_plmn_cb, ad);
1308                                         break;
1309                                 }
1310
1311                         case SETTING_NETWORK_PREFERRED_NETWORK_EDIT: {
1312                                         setting_view_change(&setting_view_network_preferred_network_edit, &setting_view_network_preferred_network,
1313                                                             ad);
1314                                         tapi_ret = tel_get_network_preferred_plmn(ad->handle, setting_tapi_get_preferred_plmn_cb, ad);
1315                                         break;
1316                                 }
1317                         case SETTING_NETWORK_PREFERRED_NETWORK_DELETE: {
1318                                         setting_network_preferred_network_delete_ok
1319                                         (ad);
1320                                         return;
1321                                 }
1322                         default: {
1323                                         SETTING_TRACE_DEBUG
1324                                         (" Unknown prederred network type");
1325                                         break;
1326                                 }
1327                 }
1328
1329                 if (tapi_ret !=
1330                     TAPI_API_SUCCESS) {
1331                         SETTING_TRACE_ERROR
1332                         ("*** [ERR] tel_get_network_preferred_plmn. err=%d ***",
1333                          tapi_ret);
1334                 }
1335         }
1336
1337 }
1338
1339 void setting_tapi_get_preferred_plmn_cb(TapiHandle *handle, int result, void *data, void *user_data)
1340 {
1341         SETTING_TRACE_BEGIN;
1342         SETTING_TRACE(" - result = 0x%x", result);
1343         ret_if(!user_data);
1344         SettingNetworkUG *ad = user_data;
1345
1346         SETTING_TRACE_DEBUG("Case: TAPI_EVENT_NETWORK_GETPREFFEREDPLMN_CNF");
1347         setting_network_popup_delete(ad);
1348
1349         if (result == TAPI_NETWORK_NO_ERR) {
1350                 memcpy(&(ad->pref_list), data, sizeof(TelNetworkPreferredPlmnList_t));
1351
1352                 SETTING_TRACE("*********** ad->op_type = %d", ad->op_type);
1353                 SETTING_TRACE("ad->pref_list.NumOfPrefPlmns:%d", ad->pref_list.NumOfPrefPlmns);
1354                 switch (ad->op_type) {
1355                         case SETTING_NETWORK_PREFERRED_NETWORK_DELETE: {
1356                                         setting_network_preferred_network_delete_draw_network_list(ad);
1357                                         break;
1358                                 }
1359                         default: {
1360                                         setting_network_preferred_network_refresh_view
1361                                         (ad);
1362                                         char info[MAX_DISPLAY_NAME_LEN_ON_UI] = { 0 };
1363                                         if (ad->pref_list.NumOfPrefPlmns > 1) {
1364                                                 snprintf(info, sizeof(info), "Get %d preferred networks",
1365                                                          ad->pref_list.NumOfPrefPlmns);
1366                                         } else {
1367                                                 snprintf(info, sizeof(info), "Get %d preferred network",
1368                                                          ad->pref_list.NumOfPrefPlmns);
1369                                         }
1370                                         setting_create_popup_without_btn(ad, ad->win_get, NULL, _(info), NULL, POPUP_INTERVAL, FALSE, FALSE);
1371                                         break;
1372                                 }
1373                 }
1374         } else {
1375                 switch (ad->op_type) {
1376                         case SETTING_NETWORK_PREFERRED_NETWORK_DELETE: {
1377                                         setting_network_preferred_network_delete_failed
1378                                         (ad);
1379                                         break;
1380                                 }
1381                         default: {
1382                                         setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_Failed_Get_PreferNetwork), NULL, POPUP_INTERVAL, FALSE, FALSE);
1383                                         break;
1384                                 }
1385                 }
1386         }
1387 }
1388
1389 void __register_network(Setting_GenGroupItem_Data *list_item)
1390 {
1391         SETTING_TRACE_BEGIN;
1392         ret_if(list_item == NULL);
1393         SETTING_TRACE("process item [%s]", list_item->keyStr);
1394         SettingNetworkUG *ad = list_item->userdata;
1395         ret_if(ad == NULL);
1396
1397         int tapi_ret = TAPI_API_INVALID_INPUT;
1398
1399         /*cancel the searching operation */
1400
1401         if (ad->data_search_network_item) {
1402                 elm_object_item_del(ad->data_search_network_item->item);
1403                 ad->data_search_network_item = NULL;
1404         }
1405
1406         if (ad->b_searching_network) {
1407                 SETTING_TRACE("Sending tel_cancel_network_manual_search..");
1408                 tapi_ret = tel_cancel_network_manual_search(ad->handle, setting_tapi_cancel_manual_search_cb, ad);
1409                 if (tapi_ret != TAPI_API_SUCCESS) {
1410                         SETTING_TRACE_ERROR("*** [ERR] tel_cancel_network_manual_search. "\
1411                                             "tapi_ret=%d ***", tapi_ret);
1412                 } else {
1413                         ad->b_searching_network = FALSE;
1414                 }
1415         }
1416
1417         if (0 == safeStrCmp(list_item->keyStr, "IDS_ST_BODY_SELECT_AUTOMATICALLY")) {
1418                 ad->sel_net = TAPI_NETWORK_SELECTIONMODE_AUTOMATIC;
1419                 SETTING_TRACE("Sending tel_select_network_automatic..");
1420                 tapi_ret = tel_select_network_automatic(ad->handle, setting_tapi_set_plmn_mode_cb, ad);
1421                 if (tapi_ret != TAPI_API_SUCCESS) {
1422                         SETTING_TRACE_DEBUG("*** [ERR] tel_select_network_automatic."\
1423                                             " tapi_ret=%d ***", tapi_ret);
1424                 } else {
1425
1426                         /* Display 'Registering' popup when automatic */
1427                         SETTING_TRACE("Automatic selection, Registering..")
1428
1429                         if (ad->network_select_registering_pop != NULL) {
1430                                 evas_object_del(ad->network_select_registering_pop);
1431                                 ad->network_select_registering_pop = NULL;
1432                         }
1433
1434                         ad->network_select_registering_pop = __create_registering_popup(list_item);
1435                         if (ad->network_select_registering_pop) {
1436                                 SETTING_TRACE("Registering popup appeared");
1437                         } else {
1438                                 SETTING_TRACE("Registering popup failed");
1439                         }
1440
1441                         if (ad->data_auto_network_item) {
1442                                 /*ad->data_auto_network_item->sub_desc = (char *)g_strdup("...."); */
1443                                 /*elm_genlist_item_item_class_update(ad->data_auto_network_item->item, &(itc_2text_1icon_6)); */
1444                                 char *sub_text = setting_customize_text("....", 0, BLUE_COLOR, NULL);
1445                                 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
1446                                 FREE(sub_text);
1447                                 elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
1448                                 elm_genlist_item_update(ad->data_auto_network_item->item);
1449                         }
1450
1451                         ad->b_set_manul_network = FALSE;
1452                         ad->b_set_auto_network = TRUE;
1453                         ad->sel_act = -1;/*means "Automatic" */
1454                 }
1455         } else {
1456                 ad->sel_net = TAPI_NETWORK_SELECTIONMODE_MANUAL;
1457                 ad->b_set_manul_network = TRUE;
1458                 ad->b_set_auto_network = FALSE;
1459
1460                 int cnt = 0;
1461                 SETTING_TRACE("ad->plmn_info.networks_count:%d",
1462                               ad->plmn_info.networks_count);
1463                 char name[MAX_COMMON_BUFFER_LEN] = {0, };
1464                 for (; cnt < ad->plmn_info.networks_count; cnt++) {
1465                         SETTING_TRACE("ad->plmn_info.network_list[cnt].network_name:%s",
1466                                       ad->plmn_info.network_list[cnt].network_name);
1467                         memset(name, 0, MAX_COMMON_BUFFER_LEN);
1468                         snprintf(name, MAX_COMMON_BUFFER_LEN, "%s",
1469                                  ad->plmn_info.network_list[cnt].network_name);
1470                         /*SETTING_TRACE("name:%s", name); */
1471
1472                         char speciliztion[MAX_COMMON_BUFFER_LEN] = {0, };
1473                         __process_special_char(speciliztion, name);
1474
1475                         SETTING_TRACE("  name:%s", speciliztion);
1476
1477                         if (!safeStrCmp(list_item->keyStr, speciliztion)) {
1478                                 SETTING_TRACE("find the right item");
1479                                 break;
1480                         }
1481                 }
1482
1483                 SETTING_TRACE_DEBUG("*** [Selected PLMN] name=%s, "\
1484                                     "srv provider=%s, PLMN ID=%s, type=%d, "\
1485                                     "access tech=%d ***",
1486                                     ad->plmn_info.network_list[cnt].network_name,
1487                                     ad->plmn_info.network_list[cnt].service_provider_name,
1488                                     ad->plmn_info.network_list[cnt].plmn,
1489                                     (int)(ad->plmn_info.network_list[cnt].type_of_plmn),
1490                                     (int)(ad->plmn_info.network_list[cnt].access_technology));
1491
1492                 /*ASYNC API - TAPI_EVENT_NETWORK_SELECT_CNF */
1493                 SETTING_TRACE("Sending tel_select_network_manual..");
1494                 tapi_ret = tel_select_network_manual(ad->handle,
1495                                                      ad->plmn_info.network_list[cnt].plmn,
1496                                                      ad->plmn_info.network_list[cnt].access_technology,
1497                                                      setting_tapi_set_plmn_mode_cb, ad);
1498                 if (tapi_ret != TAPI_API_SUCCESS) {
1499                         SETTING_TRACE_DEBUG("%s*** [ERR] "\
1500                                             "tel_select_network_manual. "\
1501                                             "tapi_ret=%d ***%s", SETTING_FONT_RED,
1502                                             tapi_ret, SETTING_FONT_BLACK);
1503                         setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_ST_BODY_FAILED_TO_SELECT_NETWORK"), NULL, POPUP_INTERVAL, FALSE, FALSE);
1504
1505                         return;
1506                 } else {
1507                         /* Display 'Registering' popup when manual */
1508                         SETTING_TRACE("Manual selection, Registering..")
1509
1510                         if (ad->network_select_registering_pop != NULL) {
1511                                 evas_object_del(ad->network_select_registering_pop);
1512                                 ad->network_select_registering_pop = NULL;
1513                         }
1514
1515                         ad->network_select_registering_pop = __create_registering_popup(list_item);
1516                         if (ad->network_select_registering_pop) {
1517                                 SETTING_TRACE("Registering popup appeared");
1518                         } else {
1519                                 SETTING_TRACE("Registering popup failed");
1520                         }
1521
1522                         ad->sel_act = ad->plmn_info.network_list[cnt].access_technology;
1523                         FREE(ad->sel_network);
1524                         ad->sel_network = strdup(ad->plmn_info.network_list[cnt].network_name);
1525                 }
1526         }
1527 }
1528
1529 static void __ignore_back_key_cb(void *data, Evas_Object *obj, void *event_info)
1530 {
1531         SETTING_TRACE_BEGIN;
1532         return;
1533 }
1534
1535 static Evas_Object *__create_registering_popup(void *data)
1536 {
1537         SETTING_TRACE_BEGIN;
1538
1539         retv_if(!data, NULL);
1540
1541         Setting_GenGroupItem_Data       *list_item = (Setting_GenGroupItem_Data *)data;
1542         SettingNetworkUG                        *ad = list_item->userdata;
1543
1544         Evas_Object *popup = elm_popup_add(ad->win_get);
1545         ea_object_event_callback_add(popup, EA_CALLBACK_BACK, __ignore_back_key_cb, list_item);
1546
1547         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1548
1549         Evas_Object *box = elm_box_add(popup);
1550
1551         elm_box_horizontal_set(box, EINA_TRUE);
1552         elm_box_align_set(box, 0.5, 0.5);
1553         elm_box_padding_set(box, 16, 0);
1554
1555         Evas_Object *progressbar = elm_progressbar_add(popup);
1556         elm_object_style_set(progressbar, PROGRESSBAR_STYLE);
1557         elm_progressbar_pulse(progressbar, EINA_TRUE);
1558         evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
1559         evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1560         elm_progressbar_pulse(progressbar, EINA_TRUE);
1561         evas_object_show(progressbar);
1562         elm_box_pack_end(box, progressbar);
1563
1564         Evas_Object *label = elm_label_add(popup);
1565         elm_object_text_set(label, _("IDS_ST_POP_REGISTERING_ING"));
1566         evas_object_show(label);
1567         elm_box_pack_end(box, label);
1568
1569         /*evas_object_show(box); */
1570         /*elm_object_content_set(popup, box); */
1571
1572         Evas_Object *table = elm_table_add(popup);
1573         evas_object_show(table);
1574         elm_table_homogeneous_set(table, EINA_FALSE);
1575
1576         Evas_Object *rect_up;
1577         rect_up = evas_object_rectangle_add(evas_object_evas_get(popup));
1578         evas_object_size_hint_min_set(rect_up, ELM_SCALE_SIZE(170), ELM_SCALE_SIZE(34));
1579
1580         Evas_Object *rect_down;
1581         rect_down = evas_object_rectangle_add(evas_object_evas_get(popup));
1582         evas_object_size_hint_min_set(rect_down, ELM_SCALE_SIZE(100), ELM_SCALE_SIZE(34));
1583
1584         elm_table_pack(table, rect_up, 0, 0, 2, 1);/* rect as a padding */
1585         elm_table_pack(table, box, 1, 1, 1, 1);
1586         elm_table_pack(table, rect_down, 2, 2, 2, 1);/* rect as a padding */
1587
1588         evas_object_show(box);
1589
1590         elm_object_content_set(popup, table);
1591
1592         evas_object_show(popup);
1593
1594         return popup;
1595 }
1596
1597 /*
1598  * Cancel for searching network
1599  */
1600 static void __search_network_cancel_cb(void *data, Evas_Object *obj,
1601                                        void *event_info)
1602 {
1603         SETTING_TRACE_BEGIN;
1604         ret_if(!data);
1605         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
1606         SettingNetworkUG *ad = list_item->userdata;
1607
1608         if (ad->popup) {
1609                 evas_object_del(ad->popup);
1610                 ad->popup = NULL;
1611         }
1612         if (ad->b_searching_network) {
1613                 SETTING_TRACE("Sending tel_cancel_network_manual_search..");
1614                 int tapi_ret = tel_cancel_network_manual_search(ad->handle, setting_tapi_cancel_manual_search_cb, ad);
1615                 if (tapi_ret != TAPI_API_SUCCESS) {
1616                         SETTING_TRACE_ERROR("*** [ERR] tel_cancel_network_manual_search. "\
1617                                             "tapi_ret=%d ***", tapi_ret);
1618                 } else {
1619                         ad->b_searching_network = FALSE;
1620                 }
1621         }
1622
1623         /* Restore selection automatically */
1624         int sel_net;
1625
1626         vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &sel_net);
1627         SETTING_TRACE("Previous selection after searching network:%d", sel_net);
1628
1629         if (sel_net == TAPI_NETWORK_SELECTIONMODE_AUTOMATIC) {
1630                 list_item->chk_status = 1;
1631                 elm_genlist_item_update(list_item->item);
1632         }
1633 }
1634
1635 Evas_Object *__create_searching_popup(void *data)
1636 {
1637         SETTING_TRACE_BEGIN;
1638         retv_if(!data, NULL);
1639         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
1640         SettingNetworkUG *ad = list_item->userdata;
1641
1642         Evas_Object *popup = elm_popup_add(ad->ly_main);
1643         ea_object_event_callback_add(popup, EA_CALLBACK_BACK, __search_network_cancel_cb, list_item);
1644         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
1645                                          EVAS_HINT_EXPAND);
1646
1647         Evas_Object *box = elm_box_add(popup);
1648
1649         elm_box_horizontal_set(box, EINA_TRUE);
1650         elm_box_align_set(box, 0.5, 0.5);
1651         elm_box_padding_set(box, 16, 0);
1652
1653         Evas_Object *progressbar = elm_progressbar_add(popup);
1654         elm_object_style_set(progressbar, PROGRESSBAR_STYLE);
1655         elm_progressbar_pulse(progressbar, EINA_TRUE);
1656         evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
1657         evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1658         elm_progressbar_pulse(progressbar, EINA_TRUE);
1659         evas_object_show(progressbar);
1660         elm_box_pack_end(box, progressbar);
1661
1662         Evas_Object *label = elm_label_add(popup);
1663         elm_object_text_set(label, _("IDS_ST_POP_NETWORKSERVICES_SEARCHING"));
1664         evas_object_show(label);
1665         elm_box_pack_end(box, label);
1666
1667         /*evas_object_show(box); */
1668         /*elm_object_content_set(popup, box); */
1669
1670         Evas_Object *table = elm_table_add(popup);
1671         evas_object_show(table);
1672         elm_table_homogeneous_set(table, EINA_FALSE);
1673
1674         Evas_Object *rect_up;
1675         rect_up = evas_object_rectangle_add(evas_object_evas_get(popup));
1676         evas_object_size_hint_min_set(rect_up, ELM_SCALE_SIZE(170), ELM_SCALE_SIZE(34));
1677
1678         Evas_Object *rect_down;
1679         rect_down = evas_object_rectangle_add(evas_object_evas_get(popup));
1680         evas_object_size_hint_min_set(rect_down, ELM_SCALE_SIZE(100), ELM_SCALE_SIZE(34));
1681
1682         elm_table_pack(table, rect_up, 0, 0, 2, 1);/* rect as a padding */
1683         elm_table_pack(table, box, 1, 1, 1, 1);
1684         elm_table_pack(table, rect_down, 2, 2, 2, 1);/* rect as a padding */
1685
1686         evas_object_show(box);
1687
1688         elm_object_content_set(popup, table);
1689
1690         evas_object_show(popup);
1691
1692         return popup;
1693 }
1694
1695 static Eina_Bool __search_net_on_timer(void *data)
1696 {
1697         /* error check */
1698         SETTING_TRACE_BEGIN;
1699         retv_if(data == NULL, EINA_FALSE);
1700         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
1701         SettingNetworkUG *ad = list_item->userdata;
1702         retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "ad is NULL");
1703
1704         /*
1705         if (ad->popup)
1706         {
1707                 evas_object_del(ad->popup);
1708                 ad->popup = NULL;
1709         }
1710         */
1711
1712         int tapi_ret;
1713         /*searching list */
1714         tapi_ret = tel_search_network(ad->handle, setting_tapi_search_network_cb, ad); /*ASYNC API - TAPI_EVENT_NETWORK_SEARCH_CNF */
1715         if (tapi_ret != TAPI_API_SUCCESS) { /* error handling.. */
1716                 SETTING_TRACE_ERROR("%s*** [ERR] tel_search_network. tapi_ret=%d ***%s", SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
1717                 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(STR_SETTING_OPERATION_FAILED), NULL, POPUP_INTERVAL, FALSE, FALSE);
1718
1719                 /* put error handler on the end of this function. */
1720                 /*rollback.. */
1721                 setting_update_gl_item_chk_status(ad->data_auto_network_item, 1);
1722                 return ECORE_CALLBACK_CANCEL;
1723         }
1724
1725         ad->b_searching_network = TRUE;
1726         /*
1727         setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_TOP);
1728         ad->data_search_network_item = setting_create_Gendial_field_1radio(
1729                                                         ad->genlist_sel_network,
1730                                                         &itc_1icon,
1731                                                         NULL, NULL,
1732                                                         SWALLOW_Type_1RADIO_1SEARCH,
1733                                                         ad->chk_sel, -1, NULL, NULL);
1734         elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1735         setting_genlist_item_groupstyle_set(ad->data_search_network_item, SETTING_GROUP_STYLE_BOTTOM);
1736         */
1737         if (ad->popup) {
1738                 evas_object_del(ad->popup);
1739                 ad->popup = NULL;
1740         }
1741         ad->popup = __create_searching_popup(list_item);
1742         if (ad->data_auto_network_item) {
1743                 /*elm_genlist_item_item_class_update(ad->data_auto_network_item->item, &(itc_2text_1icon_7)); */
1744
1745                 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, GRAY_COLOR, NULL);
1746                 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
1747                 FREE(sub_text);
1748                 elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
1749                 elm_genlist_item_update(ad->data_auto_network_item->item);
1750         }
1751
1752         /*ecore_timer_del(ad->timer); */
1753         ad->timer = NULL;
1754         return ECORE_CALLBACK_CANCEL;
1755 }
1756
1757 void __switch_automatic_on_resp_cb(void *data, Evas_Object *obj,
1758                                    void *event_info)
1759 {
1760         SETTING_TRACE_BEGIN;
1761         retm_if(data == NULL, "Data parameter is NULL");
1762
1763         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
1764         SettingNetworkUG *ad = list_item->userdata;
1765         int response_type = btn_type(obj);
1766         if (ad->popup) {
1767                 evas_object_del(ad->popup);
1768                 ad->popup = NULL;
1769         }
1770
1771         if (POPUP_RESPONSE_OK == response_type) {
1772
1773                 /* Not used, Searching network directly.
1774                 //changing of USE_PACKET_DATA was trigged by betwork searching
1775                 ad->b_trigged_by_searching = TRUE;
1776
1777                 //for delay..
1778                 ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
1779                                          PROGRESSBAR_STYLE,
1780                                          NULL, NULL, NULL, 0, TRUE, FALSE);
1781
1782                 if (ad->timer) {
1783                         ecore_timer_del(ad->timer);
1784                         ad->timer = NULL;
1785                 }
1786                 ad->timer = ecore_timer_add(TIME_TO_TURN_OFF_3G, __search_net_on_timer, list_item);
1787                 */
1788
1789                 __search_net_on_timer(list_item);
1790
1791         } else if (POPUP_RESPONSE_CANCEL == response_type) {
1792
1793                 /* Restore selection automatically */
1794                 int sel_net, chk_status;
1795
1796                 vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &sel_net);
1797                 SETTING_TRACE("Previous selection after searching network:%d", sel_net);
1798
1799                 if (sel_net == TAPI_NETWORK_SELECTIONMODE_AUTOMATIC)
1800                         chk_status = 1;
1801                 else
1802                         chk_status = 0;
1803
1804                 setting_update_gl_item_chk_status(ad->data_auto_network_item, chk_status);
1805         }
1806 }
1807
1808 void __switch_automatic_network(Setting_GenGroupItem_Data *list_item)
1809 {
1810         SETTING_TRACE_BEGIN;
1811         ret_if(!list_item || !list_item->userdata || !list_item->keyStr);
1812         ret_if(0 != safeStrCmp(list_item->keyStr, "IDS_ST_BODY_SELECT_AUTOMATICALLY"));
1813         SettingNetworkUG *ad = list_item->userdata;
1814         SETTING_TRACE("The value of toogle changes to be %d", list_item->chk_status);
1815         if (list_item->chk_status) {
1816                 /* Automatic selected */
1817                 Elm_Object_Item *last_item = elm_genlist_last_item_get(ad->genlist_sel_network);
1818                 SETTING_TRACE("ad->data_auto_network_item->item:%p", ad->data_auto_network_item->item);
1819                 for (;;) {
1820                         last_item = elm_genlist_last_item_get(ad->genlist_sel_network);
1821                         SETTING_TRACE("last_item:%p", last_item);
1822                         if (last_item == ad->data_auto_network_item->item) {
1823                                 break;
1824                         }
1825                         elm_object_item_del(last_item);
1826                 }
1827
1828                 __register_network(list_item);
1829                 setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_NONE);
1830         } else {
1831                 setting_network_searching_network(list_item);
1832         }
1833 }
1834
1835 /*
1836  * Network selection / Searching network
1837  */
1838 void
1839 setting_network_searching_network(Setting_GenGroupItem_Data *list_item)
1840 {
1841         SETTING_TRACE_BEGIN;
1842
1843         SettingNetworkUG *ad = list_item->userdata;
1844
1845         /* Manual selected */
1846         /*__register_network(list_item); */
1847
1848         int value_use_packet;
1849         vconf_get_int(VCONFKEY_DNET_STATE, &value_use_packet);
1850
1851         SETTING_TRACE("ad->sel_net:%d", ad->sel_net);
1852         if (value_use_packet != VCONFKEY_DNET_OFF) {
1853                 ad->popup =
1854                     setting_create_popup_with_btn(list_item, ad->ly_main,
1855                                                   NULL, _(SETTING_NETWORK_SEARCH_3G_ON_DESC),
1856                                                   __switch_automatic_on_resp_cb,
1857                                                   0, 2, _("IDS_ST_BUTTON_OK"), _("IDS_ST_BUTTON_CANCEL_ABB"));
1858                 /*0, 2, _("IDS_ST_BUTTON_DISCONNECT"),_("IDS_ST_BUTTON_CANCEL_ABB")); */
1859                 return;
1860         }
1861
1862         int tapi_ret;
1863         /*searching list */
1864         tapi_ret = tel_search_network(ad->handle, setting_tapi_search_network_cb, ad); /*ASYNC API - TAPI_EVENT_NETWORK_SEARCH_CNF */
1865         if (tapi_ret != TAPI_API_SUCCESS) { /* error handling.. */
1866                 SETTING_TRACE_ERROR("%s*** [ERR] tel_search_network. tapi_ret=%d ***%s", SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
1867                 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(STR_SETTING_OPERATION_FAILED), NULL, POPUP_INTERVAL, FALSE, FALSE);
1868
1869                 /* put error handler on the end of this function. */
1870                 /*rollback.. */
1871                 setting_update_gl_item_chk_status(list_item, 1);
1872                 return;
1873         }
1874
1875         ad->b_searching_network = TRUE;
1876         /*latest UI: show progress popup instead of progress item
1877         setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_TOP);
1878         ad->data_search_network_item = setting_create_Gendial_field_1radio(
1879                                                         ad->genlist_sel_network,
1880                                                         &itc_1icon,
1881                                                         NULL, NULL,
1882                                                         SWALLOW_Type_1RADIO_1SEARCH,
1883                                                         ad->chk_sel, -1, NULL, NULL);
1884         elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1885         setting_genlist_item_groupstyle_set(ad->data_search_network_item, SETTING_GROUP_STYLE_BOTTOM);
1886         */
1887         if (ad->popup) {
1888                 evas_object_del(ad->popup);
1889                 ad->popup = NULL;
1890         }
1891         ad->popup = __create_searching_popup(list_item);
1892         if (ad->data_auto_network_item) {
1893                 /*elm_genlist_item_item_class_update(ad->data_auto_network_item->item, &(itc_2text_1icon_7)); */
1894
1895                 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, GRAY_COLOR, NULL);
1896                 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
1897                 FREE(sub_text);
1898                 elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
1899                 elm_genlist_item_update(ad->data_auto_network_item->item);
1900         }
1901
1902         return;
1903 }
1904
1905 void setting_network_select_network_chk_changed(void *data, Evas_Object *obj, void *event_info)
1906 {
1907         SETTING_TRACE_BEGIN;
1908         retm_if(data == NULL || obj == NULL, "Parameter is NULL");
1909         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
1910         if (0 == safeStrCmp(list_item->keyStr, "IDS_ST_BODY_SELECT_AUTOMATICALLY")) {
1911                 list_item->chk_status = elm_check_state_get(obj);
1912                 __switch_automatic_network(list_item);
1913         } else { /*"IDS_ST_BODY_SELECT_AUTOMATICALLY" */
1914                 list_item->chk_status = elm_radio_value_get(obj);
1915                 SETTING_TRACE("[Radio index:%d] Radio checked", list_item->chk_status);
1916
1917                 __register_network(list_item);
1918         }
1919
1920 }
1921
1922
1923 void setting_network_Gendial_select_plmn_cb(void *data, Evas_Object *obj, void *event_info)
1924 {
1925         SETTING_TRACE_BEGIN;
1926         retm_if(data == NULL || event_info == NULL, "Parameter is NULL");
1927
1928         SettingNetworkUG *ad = (SettingNetworkUG *)data;
1929         Elm_Object_Item *item = (Elm_Object_Item *)event_info;
1930         elm_genlist_item_selected_set(item, 0);
1931         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
1932         setting_retm_if(NULL == list_item, "list_item is NULL");
1933
1934         SETTING_TRACE("list_item->keyStr:%s", list_item->keyStr);
1935         if (0 == safeStrCmp(list_item->keyStr, "IDS_ST_BODY_SELECT_AUTOMATICALLY")) {
1936                 setting_update_gl_item_chk_status(list_item, !(list_item->chk_status));
1937                 __switch_automatic_network(list_item);
1938                 return;
1939         } else {
1940                 if (ad->b_searching_network) {
1941                         SETTING_TRACE("Searching poup displaying, Cannot select");
1942                         return;
1943                 }
1944
1945                 int chk_status = elm_radio_value_get(ad->chk_sel);
1946                 if (chk_status != list_item->chk_status) {
1947                         SETTING_TRACE("[List index:%d] List selected (radio index:%d)", list_item->chk_status, chk_status);
1948                         elm_radio_value_set(ad->chk_sel, list_item->chk_status);
1949                         __register_network(list_item);
1950                 } else {
1951                         SETTING_TRACE("[List index:%d] Skip becuase radio checked (radio index:%d)", list_item->chk_status, chk_status);
1952                 }
1953         }
1954 }
1955
1956 /**
1957  * [UI] update
1958  */
1959 void setting_network_update_sel_network(void *data)
1960 {
1961         /*SETTING_TRACE_BEGIN; */
1962         SettingNetworkUG *ad = data;
1963         /*SETTING_TRACE("ad->sel_net:%d", ad->sel_net); */
1964         /*SETTING_TRACE("ad->sel_network:%s", ad->sel_network); */
1965         /*SETTING_TRACE("sel_act = [%s(%d)]", setting_network_get_act_str(ad->sel_act),ad->sel_act); */
1966
1967         if (ad->data_auto_network_item) {
1968                 if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net) {
1969                         /*SETTING_TRACE_DEBUG("After set as Automatic, update " */
1970                         /*                 "ad->data_auto_network_item to be [%s]", */
1971                         /*                 ad->sel_network); */
1972                         /*ad->data_auto_network_item->sub_desc = (char *)g_strdup(_(ad->sel_network)); */
1973                         char *sub_text = setting_customize_text(_(ad->sel_network), 0, BLUE_COLOR, NULL);
1974                         SETTING_TRACE("sub_text:%s", sub_text);
1975                         G_FREE(ad->data_auto_network_item->sub_desc);
1976                         ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
1977                         elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
1978                         elm_genlist_item_update(ad->data_auto_network_item->item);
1979                         elm_genlist_item_fields_update(ad->data_auto_network_item->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
1980                         FREE(sub_text);
1981                 } else {
1982                 }
1983         }
1984
1985         if (ad->data_sel_net) { /*it indicates TAPI is not responsed in time */
1986                 char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
1987                 if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net) {
1988                         snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
1989                                  "%s, %s", _("IDS_ST_BODY_ANSWERINGMODE_AUTOMATIC"), _(ad->sel_network));
1990
1991                 } else {
1992                         snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
1993                                  "%s, %s", _("IDS_ST_BODY_MANUAL"), _(ad->sel_network));
1994                 }
1995
1996                 /*SETTING_TRACE("sel_network_desc:%s", sel_network_desc); */
1997
1998                 G_FREE(ad->data_sel_net->sub_desc);
1999                 ad->data_sel_net->sub_desc = (char *)g_strdup(_(sel_network_desc));
2000
2001                 elm_object_item_data_set(ad->data_sel_net->item, ad->data_sel_net);
2002                 elm_genlist_item_update(ad->data_sel_net->item);
2003         }
2004 }
2005
2006 const char *setting_network_get_act_str(TelNetworkSystemType_t type)
2007 {
2008         switch (type) {
2009                 case TAPI_NETWORK_SYSTEM_NO_SRV: /*0 */
2010                         return "NO SERVICE";
2011                 case TAPI_NETWORK_SYSTEM_GSM: /*1 */
2012                         return "GSM";
2013                 case TAPI_NETWORK_SYSTEM_GPRS: /*2 */
2014                         return "GPRS";
2015                 case TAPI_NETWORK_SYSTEM_EGPRS: /*3 */
2016                         return "EGPRS";
2017                 case TAPI_NETWORK_SYSTEM_PCS1900: /*4 */
2018                         return "PCS1900";
2019                 case TAPI_NETWORK_SYSTEM_UMTS: /*5 */
2020                         return "WCDMA";
2021                 case TAPI_NETWORK_SYSTEM_GSM_AND_UMTS:
2022                         return "GSM/WCDMA";
2023                 case TAPI_NETWORK_SYSTEM_HSDPA:
2024                         return "HSDPA";
2025                 case TAPI_NETWORK_SYSTEM_IS95A:
2026                         return "IS95A";
2027                 case TAPI_NETWORK_SYSTEM_IS95B:
2028                         return "IS95B";
2029                 case TAPI_NETWORK_SYSTEM_CDMA_1X:
2030                         return "CDMA 1X";
2031                 case TAPI_NETWORK_SYSTEM_EVDO_REV_0:
2032                         return "EV-DO rev0";
2033                 case TAPI_NETWORK_SYSTEM_1X_EVDO_REV_0_HYBRID:
2034                         return "1X and EV-DO rev0";
2035                 case TAPI_NETWORK_SYSTEM_EVDO_REV_A:
2036                         return "EV-DO revA";
2037                 case TAPI_NETWORK_SYSTEM_1X_EVDO_REV_A_HYBRID:
2038                         return "1X and EV-DO revA";
2039                 case TAPI_NETWORK_SYSTEM_EVDV:
2040                         return "EV-DV";
2041                 case TAPI_NETWORK_SYSTEM_LTE:
2042                         return "LTE";
2043                 default:
2044                         return "NO SERVICE";
2045         }
2046 }
2047
2048 bool setting_network_equal_profile(connection_profile_h pf1, connection_profile_h pf2)
2049 {
2050         if (!pf1 && !pf2) {
2051                 SETTING_TRACE("Both profile are NULL, return TRUE");
2052                 return TRUE;
2053         } else if (!pf1 || !pf2) {
2054                 SETTING_TRACE("One profile is NULL, one is not, return FALSE");
2055                 return FALSE;
2056         }
2057
2058         connection_profile_type_e type1, type2;
2059         connection_cellular_service_type_e srvtype1, srvtype2;
2060         char *apn1, *apn2, *name1, *name2;
2061         type1 = type2 = srvtype1 = srvtype2 = 0; /*intialize */
2062         apn1 = apn2 = name1 = name2 = NULL;
2063
2064         (void)connection_profile_get_type(pf1, &type1);
2065         (void)connection_profile_get_type(pf2, &type2);
2066         (void)connection_profile_get_cellular_service_type(pf1, &srvtype1);
2067         (void)connection_profile_get_cellular_service_type(pf2, &srvtype2);
2068
2069         (void)connection_profile_get_cellular_apn(pf1, &apn1);
2070         (void)connection_profile_get_cellular_apn(pf2, &apn2);
2071         (void)connection_profile_get_name(pf1, &name1);
2072         (void)connection_profile_get_name(pf2, &name2);
2073
2074         if (type1 == type2
2075             && srvtype1 == srvtype2
2076             && 0 == safeStrCmp(apn1, apn2)
2077             && 0 == safeStrCmp(name1, name1)) {
2078                 SETTING_TRACE("They have same key fields, return TRUE.");
2079                 FREE(apn1);
2080                 FREE(apn2);
2081                 return TRUE;
2082         } else {
2083                 SETTING_TRACE("They don't have same key fields, return FALSE.");
2084                 FREE(apn1);
2085                 FREE(apn2);
2086                 return FALSE;
2087         }
2088 }
2089
2090 #define MAX_ID_LEN 512
2091 static int __profile_item_sort_cb(const void *d1, const void *d2)
2092 {
2093         SETTING_TRACE_BEGIN;
2094         connection_profile_h pf1 = (connection_profile_h)d1;
2095         connection_profile_h pf2 = (connection_profile_h)d2;
2096
2097         if (!pf1) {
2098                 return (-1);
2099         }
2100         if (!pf2) {
2101                 return (1);
2102         }
2103         char *id_str1 = NULL;
2104         char *id_str2 = NULL;
2105         connection_profile_get_id(pf1, &id_str1);
2106         connection_profile_get_id(pf2, &id_str2);
2107
2108         char *name1 = NULL;
2109         char *name2 = NULL;
2110         connection_profile_get_name(pf1, &name1);
2111         connection_profile_get_name(pf2, &name2);
2112
2113         if (isEmptyStr(id_str1)) {
2114                 FREE(id_str1);
2115                 FREE(id_str2);
2116                 return (-1);
2117         }
2118
2119         if (isEmptyStr(id_str2)) {
2120                 FREE(id_str1);
2121                 FREE(id_str2);
2122                 return (1);
2123         }
2124
2125         char str1[MAX_ID_LEN] = {0,};
2126         char str2[MAX_ID_LEN] = {0,};
2127         safeCopyStr(str1, id_str1, MAX_ID_LEN);
2128         safeCopyStr(str2, id_str2, MAX_ID_LEN);
2129         G_FREE(id_str1);
2130         G_FREE(id_str2);
2131         /*SETTING_TRACE("str1:%s, name1:%s", str1, name1); */
2132         /*SETTING_TRACE("str2:%s, name2:%s", str2, name2); */
2133
2134         char *p = NULL;
2135         /*for id1.. */
2136         p = safeStrRStr(str1, "_");
2137         if (!p) {
2138                 return (-1);
2139         }
2140         *p = '\0';
2141         p = safeStrRStr(str1, "_");
2142         if (!p) {
2143                 return (-1);
2144         }
2145         p++;
2146         int id1 = atoi(p);
2147         /*SETTING_TRACE("id1:%d", id1); */
2148
2149         /*for id2.. */
2150         p = safeStrRStr(str2, "_");
2151         if (!p) {
2152                 return (1);
2153         }
2154         *p = '\0';
2155         p = safeStrRStr(str2, "_");
2156         if (!p) {
2157                 return (1);
2158         }
2159         p++;
2160         int id2 = atoi(p);
2161
2162         /*SETTING_TRACE("id2:%d", id2); */
2163         return id1 - id2;
2164 }
2165
2166 void setting_network_reget_profile_list(void *cb)
2167 {
2168         SETTING_TRACE_BEGIN;
2169         ret_if(cb == NULL);
2170         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
2171         if (ad->profile_list != NULL) {
2172                 eina_list_free(ad->profile_list);
2173                 ad->profile_list = NULL;
2174         }
2175         connection_profile_iterator_h profile_iter = NULL;
2176         connection_profile_h profile_h = NULL;
2177         int rv = connection_get_profile_iterator(ad->connection, CONNECTION_ITERATOR_TYPE_REGISTERED, &profile_iter);
2178         if (rv != CONNECTION_ERROR_NONE) {
2179                 SETTING_TRACE_ERROR("Fail to get profile iterator [%d]", rv);
2180                 /*elm_object_disabled_set(del_btn, EINA_TRUE); */
2181                 return;
2182         }
2183
2184         int cnt = 0;
2185         connection_profile_type_e profile_type = CONNECTION_PROFILE_TYPE_CELLULAR;
2186         connection_cellular_service_type_e service_type = CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
2187
2188         while (connection_profile_iterator_has_next(profile_iter)) {
2189                 if (cnt >= MAX_PROFILE_NUM) {
2190                         break;
2191                 }
2192                 if (connection_profile_iterator_next(profile_iter, &profile_h) != CONNECTION_ERROR_NONE) {
2193                         SETTING_TRACE_ERROR("Fail to get profile handle");
2194                         break;
2195                 }
2196
2197                 if (connection_profile_get_type(profile_h, &profile_type) != CONNECTION_ERROR_NONE) {
2198                         SETTING_TRACE_ERROR("Fail to get profile type");
2199                         continue;
2200                 }
2201                 if (connection_profile_get_cellular_service_type(profile_h, &service_type) != CONNECTION_ERROR_NONE) {
2202                         SETTING_TRACE_ERROR("Fail to get service type");
2203                         continue;
2204                 }
2205
2206                 cnt++;
2207                 if (CONNECTION_PROFILE_TYPE_CELLULAR != profile_type || ad->profile_service_type != service_type) {
2208                         continue;
2209                 }
2210                 ad->profile_list = eina_list_sorted_insert(ad->profile_list, __profile_item_sort_cb, profile_h);
2211                 /*if (cnt > 1) break;//for test */
2212         }
2213         SETTING_TRACE_END;
2214 }
2215
2216 int is_lte_on_feature(void *data)
2217 {
2218         SETTING_TRACE_BEGIN;
2219         retv_if(!data, 0);
2220
2221         int ret = 0;
2222         vconf_get_int(VCONF_KEY_PRIVATE_LTE_ON, &ret);
2223         SETTING_TRACE("LTE feature status: %d", ret);
2224         return ret;
2225 }
2226
2227 static Setting_Cfg_Node_T s_cfg_node_array[] = {
2228         {"IDS_ST_MBODY_MOBILE_DATA", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_MBODY_MOBILE_DATA", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
2229         {"IDS_ST_BODY_DATA_ROAMING", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_BODY_DATA_ROAMING", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
2230         {"IDS_COM_BODY_NETWORK_OPERATORS", NULL, "viewtype:frontpage;tab:first;keyword:IDS_COM_BODY_NETWORK_OPERATORS", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
2231         {"IDS_ST_BODY_NETWORK_MODE", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_BODY_NETWORK_MODE", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
2232         {"IDS_ST_BODY_CONNECTIONS", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_BODY_CONNECTIONS", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
2233 };
2234
2235 UG_MODULE_API int setting_plugin_search_init(app_control_h service, void *priv, char **applocale)
2236 {
2237         SETTING_TRACE_BEGIN;
2238         SETTING_TRACE(">> setting-network-efl DB search code");
2239
2240         *applocale = strdup("setting:/usr/apps/org.tizen.setting/res/locale");
2241
2242         Eina_List **pplist = (Eina_List **)priv;
2243         int i;
2244         int size = sizeof(s_cfg_node_array) / sizeof(s_cfg_node_array[0]);
2245         for (i = 0; i < size; i++) {
2246                 Setting_Cfg_Node_T *node = setting_plugin_search_item_subindex_add(s_cfg_node_array[i].key_name, s_cfg_node_array[i].ug_args, IMG_Network, s_cfg_node_array[i].item_type,  s_cfg_node_array[i].data, "Network");
2247                 *pplist = eina_list_append(*pplist, node);
2248         }
2249         return 0;
2250 }
2251