tizen 2.3.1 release
[apps/home/settings.git] / setting-network / src / setting-network.c
old mode 100755 (executable)
new mode 100644 (file)
index ef4ed7d..8206e78
 /*
  * setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *
- * Licensed under the Flora License, Version 1.0 (the License);
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *     http://floralicense.org/license/
+ * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
+ * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ *
  */
 #include <setting-network.h>
 #include <setting-network-preferred-network-delete.h>
 #include <setting-network-preferred-network.h>
 #include <setting-debug.h>
+#include <efl_assist.h>
+#include <setting-cfg.h>
+
+#include <utilX.h>
+#include <Ecore_X.h>
 
 #ifndef UG_MODULE_API
 #define UG_MODULE_API __attribute__ ((visibility("default")))
 #endif
-int setting_network_subscribe_tapi_events(void *data);
-int setting_network_unsubscribe_tapi_events(void *data);
 
-static void __selected_network_change_cb(keynode_t *key, void *data)
+
+static Evas_Object *__create_registering_popup(void *data);
+
+char *__get_profile_name(int conType, void *data)
+{
+       setting_retvm_if(data == NULL, NULL, "data is NULL");
+       SettingNetworkUG *ad = (SettingNetworkUG *) data;
+       char *def_name = NULL;
+       if (CONNECTION_CELLULAR_SERVICE_TYPE_MMS == conType) {
+               connection_profile_iterator_h profile_iter = NULL;
+               connection_profile_h profile_h = NULL;
+
+               char *profile_id = NULL;
+               char *profile_name = NULL;
+               char *apn = NULL;
+               bool profile_bhidden = false;
+               connection_profile_type_e profile_type = CONNECTION_PROFILE_TYPE_CELLULAR;
+               connection_cellular_service_type_e service_type = CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
+
+               int rv = connection_get_profile_iterator(ad->connection, CONNECTION_ITERATOR_TYPE_REGISTERED, &profile_iter);
+               if (rv != CONNECTION_ERROR_NONE) {
+                       SETTING_TRACE_ERROR("Fail to get profile iterator [%d]", rv);
+                       return NULL;
+               }
+
+               int cnt = 0;
+               while (connection_profile_iterator_has_next(profile_iter)) {
+                       if (cnt >= MAX_PROFILE_NUM) {
+                               break;
+                       }
+                       if (connection_profile_iterator_next(profile_iter, &profile_h) != CONNECTION_ERROR_NONE) {
+                               SETTING_TRACE_ERROR("Fail to get profile handle");
+                               break;
+                       }
+
+                       if (connection_profile_get_type(profile_h, &profile_type) != CONNECTION_ERROR_NONE) {
+                               SETTING_TRACE_ERROR("Fail to get profile type");
+                               continue;
+                       }
+                       if (connection_profile_get_cellular_service_type(profile_h, &service_type) != CONNECTION_ERROR_NONE) {
+                               SETTING_TRACE_ERROR("Fail to get service type");
+                               continue;
+                       }
+
+                       if (connection_profile_get_name(profile_h, &profile_name) != CONNECTION_ERROR_NONE) {
+                               SETTING_TRACE_ERROR("Fail to get profile name");
+                               continue;
+                       }
+
+                       if (connection_profile_is_cellular_hidden(profile_h, &profile_bhidden) != CONNECTION_ERROR_NONE) {
+                               SETTING_TRACE_ERROR("Fail to get profile hidden attr (true/false)");
+                               continue;
+                       }
+
+                       if (connection_profile_get_cellular_apn(profile_h, &apn) != CONNECTION_ERROR_NONE) {
+                               SETTING_TRACE_ERROR("Fail to get apn");
+                               G_FREE(profile_name);
+                               continue;
+                       }
+
+                       connection_profile_get_id(profile_h, &profile_id);
+
+                       SETTING_TRACE("Record[%d:%s] profile_handle:%s, profile_id:%s, profile_name:%s, profile_type:%d, service_type:%d",
+                                     cnt, apn, profile_h, profile_id, profile_name, profile_type, service_type);
+                       if (CONNECTION_PROFILE_TYPE_CELLULAR != profile_type) {
+                               G_FREE(apn);
+                               G_FREE(profile_id);
+                               G_FREE(profile_name);
+                               continue;
+                       }
+                       if (profile_bhidden == false
+                           && CONNECTION_CELLULAR_SERVICE_TYPE_MMS == service_type) { /*unknow, match with ad->con_name */
+                               FREE(def_name); /*keep the last one */
+                               def_name = strdup(profile_name);
+                       } else {
+                               SETTING_TRACE("profile hidden attribute : %d ", profile_bhidden);
+                       }
+                       G_FREE(apn);
+                       G_FREE(profile_id);
+                       G_FREE(profile_name);
+                       cnt++;
+               }
+
+               return def_name != NULL ? def_name : strdup(KeyStr_No_Profile);
+       }
+
+       connection_profile_h def_profile = NULL;
+       (void)connection_get_default_cellular_service_profile(ad->connection,
+                                                             conType, &def_profile);
+       if (def_profile) connection_profile_get_name(def_profile, &def_name);
+
+       def_name = def_name != NULL ? def_name : strdup(KeyStr_No_Profile);
+       return def_name;
+}
+
+static void __notify_response_cb(void *data, Evas_Object *obj,
+                                 void *event_info)
 {
        SETTING_TRACE_BEGIN;
        setting_retm_if(!data, "!data");
        SettingNetworkUG *ad = data;
-       //char *value = vconf_keynode_get_str(key);
+       if (obj) {
+               evas_object_del(obj);
+               obj = NULL;
+       }
+       /* Send destroy request */
+       ug_destroy_me(ad->ug);
+}
+
+static void __selected_network_change_cb(keynode_t *key, void *data)
+{
+       /*SETTING_TRACE_BEGIN; */
+       setting_retm_if(!data, "!data");
+       SettingNetworkUG *ad = data;
        char *vconf_name = vconf_keynode_get_name(key);
 
        if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NWNAME)
@@ -38,10 +153,9 @@ static void __selected_network_change_cb(keynode_t *key, void *data)
            || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_SPN_NAME)
            || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_SVCTYPE)
           ) {
-               //ad->sel_network = strdup(value);
                ad->sel_network = get_pa_select_network();
-               if (isEmptyStr(ad->sel_network)) {
-                   ad->sel_network = strdup(_(Keystr_UNKNOWN_NETWORK));
+               if (!ad->sel_network) {
+                       ad->sel_network = strdup(Keystr_UNKNOWN_NETWORK);
                }
 
                if (0 != vconf_set_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, ad->sel_net)) {
@@ -53,21 +167,167 @@ static void __selected_network_change_cb(keynode_t *key, void *data)
                }
 
                setting_network_update_sel_network(ad);
+       } else if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_FLIGHT_MODE)) {
+               SETTING_TRACE("vconf_name:%s", vconf_name);
+               setting_create_popup_without_btn(ad, ad->ly_main, NULL, _("IDS_ST_BODY_FLIGHT_MODE_HAS_BEEN_ENABLED_NETWORK_SETTINGS_WILL_CLOSE"),
+                                                __notify_response_cb,
+                                                POPUP_INTERVAL * 2, TRUE, FALSE);
+
        }
 }
 
 
 static void setting_network_ug_cb_resize(void *data, Evas *e,
-                                        Evas_Object *obj, void *event_info)
+                                         Evas_Object *obj, void *event_info)
 {
        SettingNetworkUG *ad = (SettingNetworkUG *) data;
        setting_view_update(&setting_view_network_main, ad);
 }
 
+static setting_view *__get_network_view_to_load(void *data, app_control_h service)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retvm_if((!data), NULL, "data is NULL");
+       SettingNetworkUG *networkUG = (SettingNetworkUG *)data;
+
+       setting_view_node_table_intialize();
+
+       if (0 == safeStrCmp(networkUG->view_type_string, "netsearch")) {
+               setting_view_node_table_register(&setting_view_network_select_network, NULL);
+               return &setting_view_network_select_network;
+
+       } else {
+               setting_view_node_table_register(&setting_view_network_main, NULL);
+               setting_view_node_table_register(&setting_view_network_select_network, &setting_view_network_main);
+               setting_view_node_table_register(&setting_view_network_main_help, &setting_view_network_main);
+
+               setting_view_node_table_register(&setting_view_network_con, &setting_view_network_main);
+               setting_view_node_table_register(&setting_view_network_con_list, &setting_view_network_con);
+               setting_view_node_table_register(&setting_view_network_connection_create, &setting_view_network_con_list);
+               setting_view_node_table_register(&setting_view_network_profile_delete, &setting_view_network_con_list);
+               setting_view_node_table_register(&setting_view_network_3gcon, &setting_view_network_main);
+
+               setting_view_node_table_register(&setting_view_network_preferred_network, &setting_view_network_main);
+               setting_view_node_table_register(&setting_view_network_preferred_network_list, &setting_view_network_preferred_network);
+               setting_view_node_table_register(&setting_view_network_preferred_network_new, &setting_view_network_preferred_network);
+               setting_view_node_table_register(&setting_view_network_preferred_network_edit, &setting_view_network_preferred_network);
+               setting_view_node_table_register(&setting_view_network_preferred_network_delete, &setting_view_network_preferred_network);
+
+               return &setting_view_network_main;
+       }
+}
+
+
+
+void ___popup_view_resp_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "Data parameter is NULL");
+
+       SettingNetworkUG *ad = (SettingNetworkUG *) data;
+       int err = 0;            /* error check   */
+       int response_type = btn_type(obj);
+
+       int value = 0;
+       setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &value, &err);
+       setting_retm_if(err != 0, "get vconf failed");
+       SETTING_TRACE("value = %d", value);
+       if (POPUP_RESPONSE_OK == response_type) {
+               if (value == 0) {
+                       setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
+                                                SETTING_ON_OFF_BTN_ON, &err);
+                       setting_retm_if(err != 0, "set vconf failed");
+                       setting_update_gl_item_chk_status(ad->data_use_packet, 1);
+               } else {
+                       setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
+                                                SETTING_ON_OFF_BTN_OFF, &err);
+                       setting_retm_if(err != 0, "set vconf failed");
+
+                       setting_update_gl_item_chk_status(ad->data_use_packet, 0);
+
+                       /* should set data_roming as same as status of use_packet_data */
+                       int data_roaming_value = 0;
+                       setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, &data_roaming_value, &err);
+                       setting_retm_if(err != 0, "get vconf failed");
+                       if (data_roaming_value) {
+                               setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
+                                                        SETTING_ON_OFF_BTN_OFF, &err);
+                               setting_retm_if(err != 0, "set vconf failed");
+                               setting_update_gl_item_chk_status(ad->data_roaming, SETTING_ON_OFF_BTN_OFF);
+                       }
+               }
+       } else if (POPUP_RESPONSE_CANCEL == response_type) {
+               /* rollback */
+               setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
+                                        value, &err);
+               setting_retm_if(err != 0, "set vconf failed");
+               setting_update_gl_item_chk_status(ad->data_use_packet, value);
+       }
+#if 0
+       if (ad->popup) {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+#else
+
+       evas_object_hide(ad->popup);
+       SETTING_TRACE("ad->ug:%p", ad->ug);
+       ug_destroy_me(ad->ug);
+#endif
+}
+
+static void *___load_popup_view(ui_gadget_h ug,
+                                enum ug_mode mode, app_control_h service,
+                                void *priv)
+{
+       SettingNetworkUG *ad = priv;
+       char *viewtype = NULL;
+       app_control_get_extra_data(service, "viewtype", &viewtype);
+
+       /*   Test Case:
+       case 1:
+          vconftool set -t bool db/setting/3gEnabled "1" -f
+          ug-launcher -n setting-network-efl -d"viewtype,mobile_data"
+
+       case 2:
+          vconftool set -t db/setting/3gEnabled "0" -f
+          ug-launcher -n setting-network-efl -d"viewtype,mobile_data"
+       */
+       if (!safeStrCmp(viewtype, "mobile_data")) {
+               int status = SETTING_ON_OFF_BTN_OFF;
+               int err;
+               setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &status, &err);
+               if (status) {
+                       /*set to off */
+                       ad->popup =
+                           setting_create_popup_with_btn(ad, ad->win_get,
+                                                         _(KeyStr_Network_Turn_Off_Mobile_Data),
+                                                         _(KeyStr_Network_Mobile_Data_Has_Been_Disabled_Msg),
+                                                         ___popup_view_resp_cb,
+                                                         0, 2, keyStr_OK, keyStr_CANCEL);
+               } else {
+                       /*set to on */
+                       /*
+                       int err = 0;
+                       setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
+                                                SETTING_ON_OFF_BTN_ON, &err);*/
+                       ad->popup =
+                           setting_create_popup_with_btn(ad, ad->win_get,
+                                                         NULL, _(Data_packet_Popup_desc),
+                                                         ___popup_view_resp_cb,
+                                                         0, 2, _("IDS_COM_SK_YES"), _("IDS_COM_SK_NO"));
+               }
+
+       }
+       if (viewtype) {
+               FREE(viewtype);
+       }
+       return ad->popup;
+}
 
 static void *setting_network_ug_on_create(ui_gadget_h ug,
-                                         enum ug_mode mode, service_h service,
-                                         void *priv)
+                                          enum ug_mode mode, app_control_h service,
+                                          void *priv)
 {
        setting_retvm_if((!priv), NULL, "!priv");
 
@@ -76,65 +336,63 @@ static void *setting_network_ug_on_create(ui_gadget_h ug,
 
        networkUG->win_main_layout = (Evas_Object *) ug_get_parent_layout(ug);
        networkUG->win_get = (Evas_Object *) ug_get_window();
+
        evas_object_show(networkUG->win_main_layout);
        networkUG->evas = evas_object_evas_get(networkUG->win_main_layout);
 
        setting_retvm_if(networkUG->win_main_layout == NULL, NULL,
-                        "cannot get main window ");
-
+                        "cannot get main window ");
+#if 1
+       Evas_Object *popup_view = ___load_popup_view(ug, mode, service, priv);
+       if (popup_view) {
+               return popup_view;
+       }
+#endif
 
        /* init */
        ecore_imf_init();
 
-       //pass NULL to let TAPI access default module
+       /*pass NULL to let TAPI access default module */
        networkUG->handle =  tel_init(NULL);
        if (!networkUG->handle) {
                SETTING_TRACE_DEBUG("%s*** [ERR] tel_init. ***%s",
-                                   SETTING_FONT_RED, SETTING_FONT_BLACK);
-               //return NULL;
+                                   SETTING_FONT_RED, SETTING_FONT_BLACK);
        }
 
-       if (CONNECTION_ERROR_NONE == connection_create(&(networkUG->connection))) {
+       if (CONNECTION_ERROR_NONE != connection_create(&(networkUG->connection))) {
                SETTING_TRACE_ERROR("***Failed to connection_create.***");
-               //connection_set_type_changed_cb(connection, test_state_changed_callback, NULL);
-               //connection_set_ip_address_changed_cb(connection, test_ip_changed_callback, NULL);
-               //connection_set_proxy_address_changed_cb(connection, test_proxy_changed_callback, NULL);
        }
 
        setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
 
-       /* register view node table */
-       setting_view_node_table_intialize();
-       setting_view_node_table_register(&setting_view_network_main, NULL);
-       setting_view_node_table_register(&setting_view_network_select_network,
-                                        &setting_view_network_main);
-       setting_view_node_table_register(&setting_view_network_main_help,
-                                        &setting_view_network_main);
-
-       setting_view_node_table_register(&setting_view_network_con, &setting_view_network_main);
-       setting_view_node_table_register(&setting_view_network_connection_create, &setting_view_network_con);
-       setting_view_node_table_register(&setting_view_network_3gcon,
-                                        &setting_view_network_main);
-
-       setting_view_node_table_register
-           (&setting_view_network_preferred_network,
-            &setting_view_network_main);
-       setting_view_node_table_register
-           (&setting_view_network_preferred_network_list,
-            &setting_view_network_preferred_network);
-       setting_view_node_table_register
-           (&setting_view_network_preferred_network_new,
-            &setting_view_network_preferred_network);
-       setting_view_node_table_register
-           (&setting_view_network_preferred_network_edit,
-            &setting_view_network_preferred_network);
-       setting_view_node_table_register
-           (&setting_view_network_preferred_network_delete,
-            &setting_view_network_preferred_network);
+       networkUG->view_type_string = NULL;
+       app_control_get_extra_data(service, "viewtype", &(networkUG->view_type_string));
+       networkUG->view_to_load = __get_network_view_to_load(networkUG, service);
+       /*SETTING_TRACE("ad->whitelist_doc:%p", networkUG->whitelist_doc); */
+       /*SETTING_TRACE("ad->whitelist_root_node:%p", networkUG->whitelist_root_node); */
+
+       /*Read information from vconf, need not check whitelist in Settings */
+       /*load_XML(WHITELIST_DIR_PATH, "whiteLists", &(networkUG->whitelist_doc),&(networkUG->whitelist_root_node)); */
+
+       /*SETTING_TRACE("ad->whitelist_doc:%p", networkUG->whitelist_doc); */
+       /*SETTING_TRACE("ad->whitelist_root_node:%p", networkUG->whitelist_root_node); */
+
+       /*  creating a view. */
+       setting_view_node_set_cur_view(networkUG->view_to_load);
+       /*fix load network ug repeatedly issue */
+       if (networkUG->view_to_load == &setting_view_network_main
+           && networkUG->view_to_load->is_create) {
+               networkUG->view_to_load->is_create = 0;
+       }
+       setting_view_create(networkUG->view_to_load, (void *)networkUG);
 
+
+       /* register view node table */
+#ifdef NETWORK_MODE
        if (tel_get_network_mode(networkUG->handle, setting_tapi_get_band_cb, networkUG) != TAPI_API_SUCCESS) {
                SETTING_TRACE_ERROR("*** [ERR] tel_get_network_band. ***");
        }
+#endif
 
        if (tel_get_network_selection_mode(networkUG->handle, setting_tapi_get_plmn_mode_cb, networkUG) != TAPI_API_SUCCESS) {
                SETTING_TRACE_ERROR("*** [ERR] tel_get_network_selection_mode. ***");
@@ -144,74 +402,82 @@ static void *setting_network_ug_on_create(ui_gadget_h ug,
                SETTING_TRACE_ERROR("*** [ERR] tel_get_network_serving. ***");
        }
 
-       /*  creating a view. */
-       setting_view_node_set_cur_view(&setting_view_network_main);
-       setting_view_create(&setting_view_network_main, (void *)networkUG);
-       evas_object_event_callback_add(networkUG->win_main_layout,
-                                      EVAS_CALLBACK_RESIZE,
-                                      setting_network_ug_cb_resize, networkUG);
+       evas_object_event_callback_add(networkUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_network_ug_cb_resize, networkUG);
 
        (void)vconf_notify_key_changed(VCONFKEY_TELEPHONY_NWNAME, __selected_network_change_cb, networkUG);
        (void)vconf_notify_key_changed(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, __selected_network_change_cb, networkUG);
        (void)vconf_notify_key_changed(VCONFKEY_TELEPHONY_SPN_NAME, __selected_network_change_cb, networkUG);
        (void)vconf_notify_key_changed(VCONFKEY_TELEPHONY_SVCTYPE, __selected_network_change_cb, networkUG);
+       (void)vconf_notify_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE, __selected_network_change_cb, networkUG);
 
-       networkUG->view_type_string = NULL;
-       service_get_extra_data(service, "viewtype", &(networkUG->view_type_string));
-       if(networkUG->view_type_string) {
-               SETTING_TRACE("viewtype:%s", networkUG->view_type_string);
-       }
        return networkUG->ly_main;
 }
 
 
-static void setting_network_ug_on_start(ui_gadget_h ug, service_h service,
-                                       void *priv)
+static void setting_network_ug_on_start(ui_gadget_h ug, app_control_h service,
+                                        void *priv)
 {
+       setting_retm_if((!priv), "!priv");
+
+       SettingNetworkUG *ad = priv;
+       ad->apn_internet = __get_profile_name(CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET, ad);
+       ad->apn_MMS = __get_profile_name(CONNECTION_CELLULAR_SERVICE_TYPE_MMS, ad);
+
 }
 
-static void setting_network_ug_on_pause(ui_gadget_h ug, service_h service,
-                                       void *priv)
+static void setting_network_ug_on_pause(ui_gadget_h ug, app_control_h service,
+                                        void *priv)
 {
 }
 
-static void setting_network_ug_on_resume(ui_gadget_h ug, service_h service,
-                                        void *priv)
+static void setting_network_ug_on_resume(ui_gadget_h ug, app_control_h service,
+                                         void *priv)
 {
 }
 
-static void setting_network_ug_on_destroy(ui_gadget_h ug, service_h service,
-                                         void *priv)
+static void setting_network_ug_on_destroy(ui_gadget_h ug, app_control_h service,
+                                          void *priv)
 {
        SETTING_TRACE_BEGIN;
        setting_retm_if((!priv), "!priv");
        SettingNetworkUG *networkUG = priv;
+       /*unload_XML(&(networkUG->whitelist_doc), &(networkUG->whitelist_root_node)); */
 
-       (void)vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NWNAME,__selected_network_change_cb);
+       (void)vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NWNAME, __selected_network_change_cb);
        (void)vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, __selected_network_change_cb);
        (void)vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SPN_NAME, __selected_network_change_cb);
        (void)vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SVCTYPE, __selected_network_change_cb);
+       (void)vconf_ignore_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE, __selected_network_change_cb);
 
        evas_object_event_callback_del(networkUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_network_ug_cb_resize); /* fix flash issue for gallery */
        networkUG->ug = ug;
 
+       if (networkUG->view_type_string)
+               FREE(networkUG->view_type_string);
        G_FREE(networkUG->ed_pxy_addr_desc);
        G_FREE(networkUG->ed_pxy_port_desc);
        FREE(networkUG->sel_network);
+       FREE(networkUG->access_name);
+       FREE(networkUG->con_name);
+       FREE(networkUG->apn_internet);
+       FREE(networkUG->apn_MMS);
        /* release */
        ecore_imf_shutdown();
 
        /*  unregister dnet client */
-       if (networkUG->connection)
-       {
+       if (networkUG->connection) {
                connection_destroy(networkUG->connection);
                networkUG->connection = NULL;
        }
 
        if (networkUG->handle && tel_deinit(networkUG->handle) != TAPI_API_SUCCESS) {
                SETTING_TRACE_DEBUG
-                   ("%s*** [ERR] setting_network_unsubscribe_tapi_events. ***%s",
-                    SETTING_FONT_RED, SETTING_FONT_BLACK);
+               ("%s*** [ERR] setting_network_unsubscribe_tapi_events. ***%s",
+                SETTING_FONT_RED, SETTING_FONT_BLACK);
+       }
+       if (networkUG->profile_list != NULL) {
+               eina_list_free(networkUG->profile_list);
+               networkUG->profile_list = NULL;
        }
 
        setting_network_popup_delete(networkUG);
@@ -220,20 +486,18 @@ static void setting_network_ug_on_destroy(ui_gadget_h ug, service_h service,
        setting_view_destroy(&setting_view_network_main_help, networkUG);
 
        setting_view_destroy(&setting_view_network_con, networkUG);
+       setting_view_destroy(&setting_view_network_con_list, networkUG);
        setting_view_destroy(&setting_view_network_connection_create,
-                            networkUG);
+                            networkUG);
+       setting_view_destroy(&setting_view_network_profile_delete,
+                            networkUG);
        setting_view_destroy(&setting_view_network_3gcon, networkUG);
 
-       setting_view_destroy(&setting_view_network_preferred_network,
-                            networkUG);
-       setting_view_destroy(&setting_view_network_preferred_network_list,
-                            networkUG);
-       setting_view_destroy(&setting_view_network_preferred_network_new,
-                            networkUG);
-       setting_view_destroy(&setting_view_network_preferred_network_edit,
-                            networkUG);
-       setting_view_destroy(&setting_view_network_preferred_network_delete,
-                            networkUG);
+       setting_view_destroy(&setting_view_network_preferred_network, networkUG);
+       setting_view_destroy(&setting_view_network_preferred_network_list, networkUG);
+       setting_view_destroy(&setting_view_network_preferred_network_new, networkUG);
+       setting_view_destroy(&setting_view_network_preferred_network_edit, networkUG);
+       setting_view_destroy(&setting_view_network_preferred_network_delete, networkUG);
        setting_view_destroy(&setting_view_network_main, networkUG);
 
        if (NULL != ug_get_layout(networkUG->ug)) {
@@ -244,60 +508,127 @@ static void setting_network_ug_on_destroy(ui_gadget_h ug, service_h service,
        SETTING_TRACE_END;
 }
 
-static void setting_network_ug_on_message(ui_gadget_h ug, service_h msg,
-                                         service_h service, void *priv)
+static void setting_network_ug_on_message(ui_gadget_h ug, app_control_h msg,
+                                          app_control_h service, void *priv)
+{
+}
+
+static void __update_mobile_data_on_popup(void *data)
 {
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(NULL == data, "data is NULL");
+       SettingNetworkUG *ad = (SettingNetworkUG *) data;
+       ret_if(NULL == ad->popup_data_on);
+
+       elm_object_text_set(ad->popup_data_on, _(Data_packet_Popup_desc));
+}
+
+static void __update_mobile_data_off_popup(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(NULL == data, "data is NULL");
+       SettingNetworkUG *ad = (SettingNetworkUG *) data;
+       ret_if(NULL == ad->popup_data_off);
+
+       char *pop_info = NULL;
+       char *pop_title = NULL;
+
+       pop_info = (char *)g_strdup(_(KeyStr_Network_Mobile_Data_Has_Been_Disabled_Msg));
+       pop_title = (char *)g_strdup(_(KeyStr_Network_Turn_Off_Mobile_Data));
+
+       elm_object_text_set(ad->popup_data_off, _(pop_info));
+
+       if (pop_title) {
+               elm_object_part_text_set(ad->popup_data_off, "title,text", _(pop_title));
+       }
+       GFREE(pop_title);
 }
 
 static void setting_network_ug_on_event(ui_gadget_h ug,
-                                       enum ug_event event, service_h service,
-                                       void *priv)
+                                        enum ug_event event, app_control_h service,
+                                        void *priv)
 {
        SETTING_TRACE_BEGIN;
+       SettingNetworkUG *ad = (SettingNetworkUG *) priv;
+
        switch (event) {
-       case UG_EVENT_LOW_MEMORY:
-               break;
-       case UG_EVENT_LOW_BATTERY:
-               break;
-       case UG_EVENT_LANG_CHANGE:
-               break;
-       case UG_EVENT_ROTATE_PORTRAIT:
-               break;
-       case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
-               break;
-       case UG_EVENT_ROTATE_LANDSCAPE:
-               break;
-       case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
-               break;
-       case UG_EVENT_REGION_CHANGE:
-               break;
-       default:
-               break;
+               case UG_EVENT_LOW_MEMORY:
+                       break;
+               case UG_EVENT_LOW_BATTERY:
+                       break;
+               case UG_EVENT_LANG_CHANGE:
+                       if (ad->genlist && setting_view_network_main.is_create) {
+                               /*update items */
+                               elm_genlist_realized_items_update(ad->genlist);
+                               Elm_Object_Item *item = NULL;
+                               Setting_GenGroupItem_Data *item_data = NULL;
+                               if (ad->data_use_packet) {
+                                       item = elm_genlist_item_next_get(ad->data_use_packet->item);
+                                       if (item) {
+                                               item = elm_genlist_item_next_get(item);
+                                       }
+                                       if (item) {
+                                               item_data = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
+                                       }
+                               }
+                               if (item_data) {
+                                       const char *title = Data_packet_Sub_desc;
+                                       item_data->keyStr = strdup(title);
+                                       elm_object_item_data_set(item_data->item, item_data);
+                                       elm_genlist_item_update(item_data->item);
+                               }
+#ifdef NETWORK_MODE
+                               /*update sub text */
+                               if (ad->handle && tel_get_network_mode(ad->handle, setting_tapi_get_band_cb, ad) != TAPI_API_SUCCESS) {
+                                       SETTING_TRACE_ERROR("*** [ERR] tel_get_network_band. ***");
+                               }
+                               setting_network_update_sel_network(ad);
+#endif
+                               /*update title */
+                               Elm_Object_Item *navi_it = elm_naviframe_bottom_item_get(ad->navi_bar);
+                               ret_if(!navi_it);
+                               elm_object_item_text_set(navi_it, _("IDS_ST_BODY_NETWORK"));
+                               /*update popup */
+                               __update_mobile_data_on_popup(ad);
+                               __update_mobile_data_off_popup(ad);
+                       }
+                       break;
+               case UG_EVENT_ROTATE_PORTRAIT:
+                       break;
+               case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
+                       break;
+               case UG_EVENT_ROTATE_LANDSCAPE:
+                       break;
+               case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
+                       break;
+               case UG_EVENT_REGION_CHANGE:
+                       break;
+               default:
+                       break;
        }
 }
 
 static void setting_network_ug_on_key_event(ui_gadget_h ug,
-                                           enum ug_key_event event,
-                                           service_h service, void *priv)
+                                            enum ug_key_event event,
+                                            app_control_h service, void *priv)
 {
        SETTING_TRACE_BEGIN;
        SettingNetworkUG *ad = (SettingNetworkUG *) priv;
 
        switch (event) {
-       case UG_KEY_EVENT_END:
-               {
-                       /* setting_network_popup_delete(ad); */
-                       if (elm_naviframe_top_item_get(ad->navi_bar) ==
-                          elm_naviframe_bottom_item_get(ad->navi_bar)) {
-                               ug_destroy_me(ug);
-                       } else {
-                               /* elm_naviframe_item_pop(ad->navi_bar); */
-                               setting_view_cb_at_endKey(ad);
+               case UG_KEY_EVENT_END: {
+                               /* setting_network_popup_delete(ad); */
+                               if (elm_naviframe_top_item_get(ad->navi_bar) ==
+                                   elm_naviframe_bottom_item_get(ad->navi_bar)) {
+                                       ug_destroy_me(ug);
+                               } else {
+                                       /* elm_naviframe_item_pop(ad->navi_bar); */
+                                       setting_view_cb_at_endKey(ad);
+                               }
                        }
-               }
-               break;
-       default:
-               break;
+                       break;
+               default:
+                       break;
        }
 }
 
@@ -307,6 +638,13 @@ UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
        SettingNetworkUG *networkUG = calloc(1, sizeof(SettingNetworkUG));
        setting_retvm_if(!networkUG, -1, "Create SettingNetworkUG obj failed");
 
+#if SUPPORT_TETHERING
+       networkUG->th_main = NULL;
+       networkUG->th_connections = NULL;
+       networkUG->th_conlists = NULL;
+       networkUG->th_concreate = NULL;
+#endif
+
        ops->create = setting_network_ug_on_create;
        ops->start = setting_network_ug_on_start;
        ops->pause = setting_network_ug_on_pause;
@@ -341,12 +679,20 @@ void setting_network_popup_delete(void *data)
        SETTING_TRACE_BEGIN;
        /* error check */
        retm_if(data == NULL,
-               "setting_network_tapi_popup_create Data parameter is NULL");
+               "setting_network_tapi_popup_create Data parameter is NULL");
        SettingNetworkUG *ad = (SettingNetworkUG *) data;
+       if (ad->network_select_registering_pop != NULL) {
+               evas_object_del(ad->network_select_registering_pop);
+               ad->network_select_registering_pop = NULL;
+       }
        if (ad->network_ug_pop != NULL) {
                evas_object_del(ad->network_ug_pop);
                ad->network_ug_pop = NULL;
        }
+       if (ad->popup != NULL) {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
 }
 
 /* ***************************************************
@@ -354,115 +700,130 @@ void setting_network_popup_delete(void *data)
  *call back func
  *
  ***************************************************/
-
-void setting_tapi_set_band_cb(TapiHandle *handle, int result, void *data, void *user_data)
+#ifdef NETWORK_MODE
+/**
+ * @see also setting_tapi_set_band_cb
+ * @see also tel_get_network_mode
+ */
+void setting_tapi_get_band_cb(TapiHandle *handle, int result, void *data, void *user_data)
 {
        SETTING_TRACE_BEGIN;
        SETTING_TRACE(" - result = 0x%x", result);
        ret_if(!user_data);
        SettingNetworkUG *ad = user_data;
-       ret_if(NULL == ad->data_net_mode);
 
-       if(ad->network_ug_pop)
-       {
+       if (ad->network_ug_pop) {
                evas_object_del(ad->network_ug_pop);
                ad->network_ug_pop = NULL;
        }
 
-       int err;
-       if (result == TAPI_NETWORK_NO_ERR) {
-               setting_set_int_slp_key(ad->data_net_mode->int_slp_setting_binded,
-                                       ad->net_mode, &err);
-               char *sub_des = NULL;
-
-               switch (ad->net_mode) {
-               case TAPI_NETWORK_MODE_AUTO:
-               case TAPI_NETWORK_MODE_LTE|TAPI_NETWORK_MODE_GSM|TAPI_NETWORK_MODE_WCDMA:
-                       sub_des = _(Keystr_NetBrand_Auto);
-                       break;
-
-               case TAPI_NETWORK_MODE_GSM:
-                       sub_des = _(Keystr_NetBrand_GSM);
-                       break;
-
-               case TAPI_NETWORK_MODE_WCDMA:
-                       sub_des = _(Keystr_NetBrand_WCDMA);
-                       break;
-               case TAPI_NETWORK_MODE_LTE|TAPI_NETWORK_MODE_WCDMA:
-                       sub_des = _(Keystr_NetBrand_LTE_WCDMA);
-                       break;
-               case TAPI_NETWORK_MODE_GSM|TAPI_NETWORK_MODE_WCDMA:
-                       sub_des = _(Keystr_NetBrand_Auto_WCDMA_GSM);
-                       break;
-               default:
-                       break;
-               }
-               if (ad->data_net_mode) {
-                       ad->data_net_mode->sub_desc = (char *)g_strdup(sub_des);
-                       elm_object_item_data_set(ad->data_net_mode->item, ad->data_net_mode);
-                       elm_genlist_item_update(ad->data_net_mode->item);
-               }
-
-
-       } else {
-               setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_FAILED"), NULL, POPUP_INTERVAL, FALSE, FALSE);
-               //rollback
-               //get value from vconf
-               setting_get_int_slp_key(ad->data_net_mode->int_slp_setting_binded,
-                                       &(ad->net_mode), &err);
-               if (ad->data_net_mode->rgd) elm_radio_value_set(ad->data_net_mode->rgd, ad->net_mode);
-       }
-}
-void setting_tapi_get_band_cb(TapiHandle *handle, int result, void *data, void *user_data)
-{
-       SETTING_TRACE_BEGIN;
-       SETTING_TRACE(" - result = 0x%x", result);
-       ret_if(!user_data);
-       SettingNetworkUG *ad = user_data;
-
        if (result == TAPI_NETWORK_NO_ERR) {
                int band;
                int temp_net_mode = 0;
                memcpy(&band, data, sizeof(int));
-               SETTING_TRACE("band:%d", band);
+
+               SETTING_TRACE("tel_get_network_mode() callback received, band=%d", band);
+
                temp_net_mode = band;
+
                /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 modify */
-               if (temp_net_mode != ad->net_mode) {
-                       ad->net_mode = temp_net_mode;
-                       const char *sub_desc = NULL;
-                       switch (ad->net_mode) {
+               ad->net_mode = temp_net_mode;
+
+               const char *sub_desc = NULL;
+               /* Need to fix */
+               char *szCscFeatureValue = "all_numeric";
+
+               switch (ad->net_mode) {
                        case TAPI_NETWORK_MODE_AUTO:
-                       case TAPI_NETWORK_MODE_LTE|TAPI_NETWORK_MODE_GSM|TAPI_NETWORK_MODE_WCDMA:
-                               sub_desc = _(Keystr_NetBrand_Auto);
+                       case TAPI_NETWORK_MODE_LTE|TAPI_NETWORK_MODE_WCDMA|TAPI_NETWORK_MODE_GSM:
+                               if (is_lte_on_feature(ad)) {
+                                       if (strcmp(szCscFeatureValue, "all_numeric") == 0)
+                                               sub_desc = _("IDS_ST_OPT_4G_3G_2G_HAUTO_CONNECT");
+                                       else
+                                               sub_desc = _("IDS_ST_OPT_LTE_WCDMA_GSM_HAUTO_CONNECT");
+                               }
                                break;
-                       case  TAPI_NETWORK_MODE_GSM:
-                               sub_desc = _(Keystr_NetBrand_GSM);
+                       case TAPI_NETWORK_MODE_WCDMA|TAPI_NETWORK_MODE_GSM:
+                               if (strcmp(szCscFeatureValue, "all_numeric") == 0)
+                                       sub_desc = _("IDS_ST_OPT_3G_2G_HAUTO_CONNECT");
+                               else
+                                       sub_desc = _("IDS_ST_OPT_WCDMA_GSM_HAUTO_CONNECT");
                                break;
                        case TAPI_NETWORK_MODE_WCDMA:
-                               sub_desc = _(Keystr_NetBrand_WCDMA);
+                               if (strcmp(szCscFeatureValue, "all_numeric") == 0)
+                                       sub_desc = _("IDS_ST_BODY_3G_ONLY");
+                               else
+                                       sub_desc = _("IDS_ST_MBODY_WCDMA_ONLY");
                                break;
+                       case TAPI_NETWORK_MODE_GSM:
+                               if (strcmp(szCscFeatureValue, "all_numeric") == 0)
+                                       sub_desc = _("IDS_ST_OPT_2G_ONLY");
+                               else
+                                       sub_desc = _("IDS_ST_MBODY_GSM_ONLY");
+                               break;
+                               /* for docomo */
                        case TAPI_NETWORK_MODE_LTE|TAPI_NETWORK_MODE_WCDMA:
                                sub_desc = _(Keystr_NetBrand_LTE_WCDMA);
                                break;
-                       case TAPI_NETWORK_MODE_GSM|TAPI_NETWORK_MODE_WCDMA:
-                               sub_desc = _(Keystr_NetBrand_Auto_WCDMA_GSM);
                        default:
                                break;
-                       }
-                       if (ad->data_net_mode) {
-                               ad->data_net_mode->sub_desc = (char *)g_strdup(sub_desc);
-                               elm_object_item_data_set (ad->data_net_mode->item, ad->data_net_mode);
-                               elm_genlist_item_update(ad->data_net_mode->item);
+               }
 
-                       }
-                       vconf_set_int(VCONFKEY_SETAPPL_NETWORK_MODE_INT, ad->net_mode);
+               if (ad->data_net_mode) {
+                       ad->data_net_mode->sub_desc = (char *)g_strdup(sub_desc);
+                       elm_object_item_data_set(ad->data_net_mode->item, ad->data_net_mode);
+                       elm_genlist_item_update(ad->data_net_mode->item);
+                       elm_genlist_item_expanded_set(ad->data_net_mode->item, FALSE);
                }
+
+               vconf_set_int(VCONFKEY_SETAPPL_NETWORK_MODE_INT, ad->net_mode);
+               /*} */
                /*  ****END****  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 modify */
        } else {
+               SETTING_TRACE("tel_get_network_mode() callback error(%d)", result);
+       }
+}
+
+/**
+ * @see also tel_set_network_mode : registers this callback function
+ */
+void setting_tapi_set_band_cb(TapiHandle *handle, int result, void *data, void *user_data)
+{
+       SETTING_TRACE_BEGIN;
+       SETTING_TRACE(" - result = 0x%x  , %d", result, result);
+       ret_if(!user_data);
+       SettingNetworkUG *ad = user_data;
+       ret_if(NULL == ad->data_net_mode);
+       if (ad->network_ug_pop) {
+               evas_object_del(ad->network_ug_pop);
+               ad->network_ug_pop = NULL;
+       }
+
+       if (tel_get_network_mode(ad->handle, setting_tapi_get_band_cb, ad) != TAPI_API_SUCCESS) {
+               SETTING_TRACE_ERROR("*** [ERR] tel_get_network_band. ***");
        }
 }
+#endif
+void __back_to_previous_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "Data parameter is NULL");
+       SettingNetworkUG *ad = (SettingNetworkUG *) data;
+
+       if (obj) {
+               evas_object_del(obj);
+               obj = NULL;
+       }
 
+       /*go back to previous view if set successfully */
+       setting_view_change(
+           &setting_view_network_select_network,
+           &setting_view_network_main, ad);
+}
 
+/**
+ * @see also __register_network
+ */
 void setting_tapi_set_plmn_mode_cb(TapiHandle *handle, int result, void *data, void *user_data)
 {
        SETTING_TRACE_BEGIN;
@@ -473,27 +834,71 @@ void setting_tapi_set_plmn_mode_cb(TapiHandle *handle, int result, void *data, v
        setting_network_popup_delete(ad);
 
        if ((TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net
-           && !ad->b_set_auto_network) ||
+            && !ad->b_set_auto_network) ||
            (TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net
-           && !ad->b_set_manul_network))
-       {
+            && !ad->b_set_manul_network)) {
                /*The requeset has already been canceled, return directly*/
+               SETTING_TRACE("The requeset has already been canceled, return directly");
                return;
        }
 
-       if(result != TAPI_NETWORK_NO_ERR) {/*roolback..*/
-               setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_Failed_Select_Network), NULL, POPUP_INTERVAL, FALSE, FALSE);
+       if (result != TAPI_NETWORK_NO_ERR) { /*roolback..*/
+               if (TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net
+                   && ad->data_auto_network_item && !ad->data_auto_network_item->chk_status) {
+                       SETTING_TRACE("Need refreshing");
+                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_Failed_Select_Network), NULL, 2 * POPUP_INTERVAL, FALSE, FALSE);
+#if 0
+                       /*for issue P130920-01974, do not re-search network if failed */
+                       int tapi_ret;
+                       /*searching list */
+                       tapi_ret = tel_search_network(ad->handle, setting_tapi_search_network_cb, ad); /*ASYNC API - TAPI_EVENT_NETWORK_SEARCH_CNF */
+                       if (tapi_ret != TAPI_API_SUCCESS) { /* error handling.. */
+                               SETTING_TRACE_DEBUG("%s*** [ERR] tel_search_network. tapi_ret=%d ***%s", SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
+                               setting_create_popup_without_btn(ad, ad->win_get, NULL, _(STR_SETTING_OPERATION_FAILED), NULL, POPUP_INTERVAL, FALSE, FALSE);
+                               /* put error handler on the end of this function. */
+                               return;
+                       }
+                       ad->b_searching_network = TRUE;
+
+                       Elm_Object_Item *item = elm_genlist_last_item_get(ad->genlist_sel_network);
+                       Setting_GenGroupItem_Data *data_item = NULL;
+                       while (item) {
+                               data_item = elm_object_item_data_get(item);
+                               if (data_item && 0 == safeStrCmp(data_item->keyStr, "IDS_COM_BODY_SELECT_AUTOMATICALLY")) {
+                                       break;
+                               }
+
+                               elm_object_item_del(item);
+                               item = NULL;
+                               item = elm_genlist_last_item_get(ad->genlist_sel_network);
+                       }
+                       /*no service case: */
+                       ad->data_search_network_item = setting_create_Gendial_field_1radio(
+                                                          ad->genlist_sel_network,
+                                                          &itc_1icon,
+                                                          NULL, NULL,
+                                                          SWALLOW_Type_1RADIO_1SEARCH,
+                                                          ad->chk_sel, -1, NULL, NULL);
+                       __BACK_POINTER_SET(ad->data_search_network_item);
+                       elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                       setting_genlist_item_groupstyle_set(ad->data_search_network_item, SETTING_GROUP_STYLE_BOTTOM);
+#endif
+                       elm_radio_value_set(ad->chk_sel, -2);
+               } else {
+                       /*setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Network selection failed"), NULL, 2*POPUP_INTERVAL, FALSE, FALSE); */
+               }
 
-               //rollback sel_act and sel_net in setting_view_network_select_network.destroy()
+               /*rollback sel_act and sel_net in setting_view_network_select_network.destroy() */
+               if (ad->handle) tel_get_network_selection_mode(ad->handle, setting_tapi_get_plmn_mode_cb, ad);
+               /*
                setting_view_change(
                        &setting_view_network_select_network,
-                       &setting_view_network_main, ad);
+                       &setting_view_network_main, ad);*/
 
                return;
 
        }
 
-       setting_create_popup_without_btn(ad, ad->win_get, NULL, _(KeyStr_Saved), NULL, POPUP_INTERVAL, FALSE, FALSE);
        if (0 != vconf_set_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, ad->sel_net)) {
                SETTING_TRACE_ERROR("vconf[%s] set failed");
        }
@@ -504,7 +909,21 @@ void setting_tapi_set_plmn_mode_cb(TapiHandle *handle, int result, void *data, v
        ad->b_set_auto_network = FALSE;
        ad->b_set_manul_network = FALSE;
        setting_network_update_sel_network(ad);
+
+       Evas_Object *popup = elm_popup_add(ad->win_get);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       char r_str_text[128] = { 0, };
+       snprintf(r_str_text, 128, "<align=left>");
+       g_strlcat(r_str_text, _("IDS_ST_POP_REGISTERED"), 128);
+       g_strlcat(r_str_text, "</align>", 128);
+       elm_object_text_set(popup, r_str_text);
+       elm_popup_timeout_set(popup, 2.0);
+       evas_object_smart_callback_add(popup, "timeout", __back_to_previous_cb, ad);
+       evas_object_show(popup);
 }
+
 void setting_tapi_get_plmn_mode_cb(TapiHandle *handle, int result, void *data, void *user_data)
 {
        SETTING_TRACE_BEGIN;
@@ -525,6 +944,88 @@ void setting_tapi_get_plmn_mode_cb(TapiHandle *handle, int result, void *data, v
        }
 }
 
+#define DOCOMO_PLMN_ID "44010"
+/**
+ *
+ */
+void ___sort_merge_handle(void *usrdata, TelNetworkPlmnList_t *list)
+{
+       SETTING_TRACE_BEGIN;
+       SettingNetworkUG *ad = usrdata;
+       int cnt = 0;
+       ad->plmn_info.networks_count = list->networks_count;
+       SETTING_TRACE("list->networks_count:%d", list->networks_count);
+       int idx = 0;
+       for (idx = 0; idx < list->networks_count; idx++) {
+               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,
+                             list->network_list[idx].service_provider_name,
+                             list->network_list[idx].plmn, list->network_list[idx].plmn_id,
+                             list->network_list[idx].type_of_plmn,
+                             list->network_list[idx].access_technology);
+       }
+       SETTING_TRACE("*****************************************************");
+
+       int j = 0;
+       bool alread_exist = FALSE;
+       for (idx = 0; idx < list->networks_count; idx++) {
+               alread_exist = FALSE;
+               for (j = 0; j < cnt; j++) {
+                       if (0 == safeStrCmp(ad->plmn_info.network_list[j].network_name, list->network_list[idx].network_name)
+                           || 0 == safeStrCmp(ad->plmn_info.network_list[j].plmn, list->network_list[idx].plmn)) {
+                               alread_exist = TRUE;
+                               break;
+                       }
+               }
+               if (alread_exist) {
+                       continue;
+               }
+               memcpy(&(ad->plmn_info.network_list[cnt++]), &(list->network_list[idx]), sizeof(TelNetworkIdentity_t));
+       }
+
+       SETTING_TRACE("cnt:%d, list->networks_count=%d", cnt, list->networks_count);
+       SETTING_TRACE("*****************************************************");
+       SETTING_TRACE("After Sorted:");
+       ad->plmn_info.networks_count = list->networks_count = cnt;
+       for (idx = 0; idx < list->networks_count; idx++) {
+               SETTING_TRACE("[%d]:network_name=%s,plmn=%s,plmn_id=%d,access_technology=%d", idx,
+                             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);
+       }
+}
+
+/*special process for char '&', such as AT&T */
+void __process_special_char(char *dst, const char *src)
+{
+       char *temp1 = (char *)src;
+       char *temp2 = strchr(temp1, '&');
+       char *temp = NULL;
+
+       while (NULL != temp2) {
+               if (0 == safeStrNCmp(temp2, "&amp;", strlen("&amp;"))) {
+                       temp = temp2 + 1;
+                       if ('\0' == temp[0]) {
+                               break;
+                       }
+                       temp2 = strchr(temp, '&');
+               } else {
+                       g_strlcat(dst, temp1, temp2 - temp1 + 1);
+                       g_strlcat(dst, "&amp;", MAX_SPECIALIZITION_LEN);
+                       temp1 = temp2 + 1;
+                       if ('\0' == temp1[0]) {
+                               break;
+                       }
+                       temp2 = strchr(temp1, '&');
+               }
+       }
+       if ('\0' != temp1[0]) {
+               g_strlcat(dst, temp1, MAX_SPECIALIZITION_LEN);
+       }
+}
+
+/**
+ * async api call - searching network list
+ *
+ * @see also tel_search_network
+ */
 void setting_tapi_search_network_cb(TapiHandle *handle, int result, void *data, void *user_data)
 {
        ret_if(!data || !user_data);
@@ -537,63 +1038,162 @@ void setting_tapi_search_network_cb(TapiHandle *handle, int result, void *data,
                /*The requeset has already been canceled, don't do detail process*/
                return;
        }
-       //setting_finish_progress_genlist_item(ad->data_selected_network_item);
-       if (ad->data_search_network_item)
-       {
+
+       if (ad->data_search_network_item) {
+               /* [ UI UPDATE ]*/
                elm_object_item_del(ad->data_search_network_item->item);
                ad->data_search_network_item = NULL;
        }
 
+#if 0 /*do when exit the searching view to avid this case:failed switch selected network when use packet data on */
+       int err;
+       if (ad->b_restore_3g_status) {
+               /*changing of USE_PACKET_DATA was trigged by betwork searching */
+               ad->b_trigged_by_searching = TRUE;
+
+               ad->b_restore_3g_status = FALSE;/* reset for next time */
+               setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
+                                        SETTING_ON_OFF_BTN_ON, &err);
+               setting_update_gl_item_chk_status(ad->data_use_packet, 1);
+       }
+
+       /* should set data_roming as same as status of use_packet_data */
+       if (ad->b_restore_roaming_status) {
+               ad->b_restore_roaming_status = FALSE;/* reset for next time */
+               setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
+                                        SETTING_ON_OFF_BTN_ON, &err);
+               setting_update_gl_item_chk_status(ad->data_roaming, 1);
+       }
+
+#endif
        ad->b_searching_network = FALSE;
        int valid_cnt = 0;
        if (result == TAPI_NETWORK_NO_ERR) {
                int cnt = 0;
-               memcpy(&(ad->plmn_info), data, sizeof(TelNetworkPlmnList_t));
+#if 0 /*for connstructing test data */
+               TelNetworkPlmnList_t tl;
+               tl.networks_count = 9;
+               int i = 0;
+               safeCopyStr(tl.network_list[i].network_name, "AAA", TAPI_NETWORK_NAME_LEN_MAX);
+               safeCopyStr(tl.network_list[i].plmn, "112", 3);
+               tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_GSM;
+
+               safeCopyStr(tl.network_list[i].network_name, "BBB", TAPI_NETWORK_NAME_LEN_MAX);
+               safeCopyStr(tl.network_list[i].plmn, "113", 3);
+               tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_LTE;
+
+               safeCopyStr(tl.network_list[i].network_name, "AT&T", TAPI_NETWORK_NAME_LEN_MAX);
+               safeCopyStr(tl.network_list[i].plmn, "117", 3);
+               tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_UMTS;
+
+               safeCopyStr(tl.network_list[i].network_name, "DDD", TAPI_NETWORK_NAME_LEN_MAX);
+               safeCopyStr(tl.network_list[i].plmn, "113", 3);
+               tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_LTE;
+
+               safeCopyStr(tl.network_list[i].network_name, "EEE", TAPI_NETWORK_NAME_LEN_MAX);
+               safeCopyStr(tl.network_list[i].plmn, "118", 3);
+               tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_GSM;
+
+               safeCopyStr(tl.network_list[i].network_name, "FFF", TAPI_NETWORK_NAME_LEN_MAX);
+               safeCopyStr(tl.network_list[i].plmn, "110", 3);
+               tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_LTE;
+
+               safeCopyStr(tl.network_list[i].network_name, "NTT DOCOMO", TAPI_NETWORK_NAME_LEN_MAX);
+               /*tl.network_list[i].plmn_id = DOCOMO_PLMN_ID; */
+               safeCopyStr(tl.network_list[i].plmn, DOCOMO_PLMN_ID, sizeof(DOCOMO_PLMN_ID));
+               tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_UMTS;
+
+               safeCopyStr(tl.network_list[i].network_name, "NTT DOCOMO", TAPI_NETWORK_NAME_LEN_MAX);
+               /*tl.network_list[i].plmn_id = DOCOMO_PLMN_ID; */
+               safeCopyStr(tl.network_list[i].plmn, DOCOMO_PLMN_ID, sizeof(DOCOMO_PLMN_ID));
+               tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_HSDPA;
+
+               safeCopyStr(tl.network_list[i].network_name, "NTT DOCOMO", TAPI_NETWORK_NAME_LEN_MAX);
+               /*tl.network_list[i].plmn_id = DOCOMO_PLMN_ID; */
+               safeCopyStr(tl.network_list[i].plmn, DOCOMO_PLMN_ID, sizeof(DOCOMO_PLMN_ID));
+               tl.network_list[i++].access_technology = TAPI_NETWORK_SYSTEM_LTE;
+               ___sort_merge_handle(ad, &tl);
+#else
+               ___sort_merge_handle(ad, data);
+#endif
 
                Setting_GenGroupItem_Data *item_data = NULL;
 
-               //const char *pa_net_name = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
                const char *pa_net_name = get_pa_select_network();
+               char *cur_plmn = NULL;
+               tel_get_property_string(ad->handle, TAPI_PROP_NETWORK_PLMN, &cur_plmn);
                SETTING_TRACE("VCONFKEY_TELEPHONY_NWNAME:pa_net_name:%s", pa_net_name);
+               SETTING_TRACE("cur_plmn:%s", cur_plmn);
 
                char name[MAX_COMMON_BUFFER_LEN] = {0, };
-               while(cnt < ad->plmn_info.networks_count) {
-                       SETTING_TRACE("network name from TAPI[%d]:%s --%s --(%s)", cnt,
-                                     ad->plmn_info.network_list[cnt].network_name,
-                                     ad->plmn_info.network_list[cnt].service_provider_name,
-                                     setting_network_get_act_str(ad->plmn_info.network_list[cnt].access_technology));
-
+               while (cnt < ad->plmn_info.networks_count) {
+                       SETTING_TRACE("network name from TAPI[%d]:%s --%s --(plmn=%s,plmn_id=%d,at=%s)", cnt,
+                                     ad->plmn_info.network_list[cnt].network_name,
+                                     ad->plmn_info.network_list[cnt].service_provider_name,
+                                     ad->plmn_info.network_list[cnt].plmn,
+                                     ad->plmn_info.network_list[cnt].plmn_id,
+                                     setting_network_get_act_str(ad->plmn_info.network_list[cnt].access_technology));
+#if 0
                        if (TAPI_FORBIDDEN_PLMN == ad->plmn_info.network_list[cnt].type_of_plmn) {
                                cnt++;
                                continue;
                        }
+#endif
 
+                       /* Because of displaying selected PLMN.
                        if (TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net
                            && 0 == safeStrCmp(pa_net_name, ad->plmn_info.network_list[cnt].network_name)
-                           && ad->plmn_info.network_list[cnt].access_technology == ad->sel_act)
                        {
                                //already displayed.
                                cnt++;
                                continue;
                        }
+                       */
+
+                       if (isSpaceStr(ad->plmn_info.network_list[cnt].network_name)) {
+                               /*skip empty string. */
+                               cnt++;
+                               continue;
+                       }
 
                        memset(name, 0, MAX_COMMON_BUFFER_LEN);
-                       snprintf(name, MAX_COMMON_BUFFER_LEN, "%s (%s)",
-                                ad->plmn_info.network_list[cnt].network_name,
-                                setting_network_get_act_str(ad->plmn_info.network_list[cnt].access_technology));
+                       /* Because of displaying selected PLMN.
+                       if (TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net
+                           && 0 == safeStrCmp(cur_plmn, ad->plmn_info.network_list[cnt].plmn)
+                           && 0 != safeStrCmp(_(pa_net_name), "Emergency calls only")
+                           && 0 != safeStrCmp(_(pa_net_name), _("IDS_CALL_POP_CALLING_EMERG_ONLY"))
+                           && 0 != safeStrCmp(_(pa_net_name), "No service")
+                           && 0 != safeStrCmp(_(pa_net_name), "EMERGENCY")
+                           )
+                       {
+                               //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")
+                               //already displayed.
+                               cnt++;
+                               continue;
+                       }
+                       */
+
+                       snprintf(name, MAX_COMMON_BUFFER_LEN, "%s",
+                                ad->plmn_info.network_list[cnt].network_name);
+                       /*SETTING_TRACE("name:%s", name); */
+                       char speciliztion[MAX_COMMON_BUFFER_LEN] = {0, };
+                       __process_special_char(speciliztion, name);
 
+                       SETTING_TRACE("name:%s", speciliztion);
+                       setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_TOP);
                        item_data = setting_create_Gendial_field_1radio(
-                                               ad->genlist_sel_network,
-                                               &itc_1text_2icon_2,
-                                               setting_network_Gendial_select_plmn_cb,
-                                               ad,
-                                               SWALLOW_Type_1RADIO,
-                                               ad->chk_sel,
-                                               TAPI_NETWORK_SELECTIONMODE_MANUAL+valid_cnt+1,
-                                               name,
-                                               setting_network_select_network_chk_changed);
-                       if (NULL == item_data)
-                       {
+                                       ad->genlist_sel_network,
+                                       &itc_multiline_1text_1icon,
+                                       setting_network_Gendial_select_plmn_cb,
+                                       ad,
+                                       /*SWALLOW_Type_1RADIO, */
+                                       SWALLOW_Type_1RADIO_1TEXT,
+                                       ad->chk_sel,
+                                       TAPI_NETWORK_SELECTIONMODE_MANUAL + valid_cnt + 1,
+                                       speciliztion,
+                                       setting_network_select_network_chk_changed);
+                       setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
+                       if (NULL == item_data) {
                                SETTING_TRACE_ERROR("Failed to calloc memory");
                                cnt++;
                                continue;
@@ -601,35 +1201,40 @@ void setting_tapi_search_network_cb(TapiHandle *handle, int result, void *data,
                        item_data->userdata = ad;
                        if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC != ad->sel_net
                            && 0 == safeStrCmp(pa_net_name, ad->plmn_info.network_list[cnt].network_name)
-                           && ad->plmn_info.network_list[cnt].access_technology == ad->sel_act)
-                       {
-                               elm_radio_value_set(ad->chk_sel, item_data->chk_status);//let select nothing
+                           && ad->plmn_info.network_list[cnt].access_technology == ad->sel_act) {
+                               /* [ UI UPDATE ]*/
+                               elm_radio_value_set(ad->chk_sel, item_data->chk_status);/*let select nothing */
                        }
                        cnt++;
                        valid_cnt++;
                }
+               setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_BOTTOM);
                FREE(pa_net_name);
 
                SETTING_TRACE("Found %d valid networks in total[%d]", valid_cnt, cnt);
-               //valid_cnt = 0; for test..
-               if (valid_cnt > 0){
+               /*valid_cnt = 0; for test.. */
+               if (valid_cnt > 0) {
+                       /* [ UI UPDATE ]*/
                        setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_Searched), NULL, POPUP_INTERVAL, FALSE, FALSE);
-               } else { //there is no invalid plmn nearby
-                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _("There is no network nearby"), NULL, POPUP_INTERVAL, FALSE, FALSE);
+               } else { /*there is no invalid plmn nearby */
+                       /* [ UI UPDATE ]*/
+                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_No_Other_Network), NULL, POPUP_INTERVAL, FALSE, FALSE);
                }
        } else {
+               /* [ UI UPDATE ]*/
                setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_Failed_Searched), NULL, POPUP_INTERVAL, FALSE, FALSE);
        }
-       if (0 == valid_cnt && TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net && ad->data_auto_network_item)
-       {
+       if (0 == valid_cnt && TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net && ad->data_auto_network_item) {
+
+               /* [ UI UPDATE ]*/
                ad->data_auto_network_item->chk_status = TRUE;
-               //elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
-               //elm_genlist_item_item_class_update(ad->data_auto_network_item->item, &(itc_2text_1icon_6));
+               /*elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item); */
+               /*elm_genlist_item_item_class_update(ad->data_auto_network_item->item, &(itc_2text_1icon_6)); */
                char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, BLUE_COLOR, NULL);
                ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
                FREE(sub_text);
                elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
-               elm_genlist_item_update( ad->data_auto_network_item->item);
+               elm_genlist_item_update(ad->data_auto_network_item->item);
        }
 }
 
@@ -642,22 +1247,19 @@ void setting_tapi_get_serving_network_cb(TapiHandle *handle, int result, void *d
        SettingNetworkUG *ad = user_data;
        TelNetworkServing_t *srv_nt = data;
 
-       if (result == TAPI_NETWORK_NO_ERR)
-       {
+       if (result == TAPI_NETWORK_NO_ERR) {
                ad->sel_act = srv_nt->act;
                vconf_set_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, ad->sel_act);
 
                FREE(ad->sel_network);
-               //ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
+               /*ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME); */
                ad->sel_network = get_pa_select_network();
-               if (isEmptyStr(ad->sel_network)) {
-                   ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK)+1);
+               if (!ad->sel_network) {
+                       ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK) + 1);
                }
                setting_network_update_sel_network(ad);
-       }
-       else
-       {
-               //if failed, do nothing..
+       } else {
+               /*if failed, do nothing.. */
        }
        SETTING_TRACE_END;
 
@@ -669,7 +1271,7 @@ void setting_tapi_cancel_manual_search_cb(TapiHandle *handle, int result, void *
        SETTING_TRACE_BEGIN;
        SETTING_TRACE(" - result = 0x%x", result);
        ret_if(!user_data);
-       //SettingNetworkUG *ad = user_data;
+       /*SettingNetworkUG *ad = user_data; */
 }
 
 void setting_tapi_set_preferred_plmn_cb(TapiHandle *handle, int result, void *data, void *user_data)
@@ -682,74 +1284,54 @@ void setting_tapi_set_preferred_plmn_cb(TapiHandle *handle, int result, void *da
 
        if (result != TAPI_NETWORK_NO_ERR) {
                switch (ad->op_type) {
-               case SETTING_NETWORK_PREFERRED_NETWORK_DELETE:
-               {
-                       setting_network_preferred_network_delete_failed(ad);
-                       break;
-               }
-               default:
-               {
-                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_ERROR"), NULL, POPUP_INTERVAL, FALSE, FALSE);
-                       break;
-               }
+                       case SETTING_NETWORK_PREFERRED_NETWORK_DELETE: {
+                                       setting_network_preferred_network_delete_failed(ad);
+                                       break;
+                               }
+                       default: {
+                                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_ERROR"), NULL, POPUP_INTERVAL, FALSE, FALSE);
+                                       break;
+                               }
                }
        } else {
                int tapi_ret = TAPI_API_SUCCESS;
                switch (ad->op_type) {
-               case SETTING_NETWORK_PREFERRED_NETWORK_NEW:
-               {
-                       setting_view_change
-                           (&setting_view_network_preferred_network_new,
-                            &setting_view_network_preferred_network,ad);
-                       tapi_ret =
-                           tel_get_network_preferred_plmn
-                           (ad->handle, setting_tapi_get_preferred_plmn_cb, ad);
-                       break;
-               }
-
-               case SETTING_NETWORK_PREFERRED_NETWORK_LIST:
-               {
-
-                       setting_view_change
-                           (&setting_view_network_preferred_network_list,
-                            &setting_view_network_preferred_network,
-                            ad);
-                       tapi_ret =
-                           tel_get_network_preferred_plmn
-                           (ad->handle, setting_tapi_get_preferred_plmn_cb, ad);
-                       break;
-               }
-
-               case SETTING_NETWORK_PREFERRED_NETWORK_EDIT:
-               {
-                       setting_view_change
-                           (&setting_view_network_preferred_network_edit,
-                            &setting_view_network_preferred_network,
-                            ad);
-                       tapi_ret =
-                           tel_get_network_preferred_plmn
-                           (ad->handle, setting_tapi_get_preferred_plmn_cb, ad);
-                       break;
-               }
-               case SETTING_NETWORK_PREFERRED_NETWORK_DELETE:
-               {
-                       setting_network_preferred_network_delete_ok
-                           (ad);
-                       return;
-               }
-               default:
-               {
-                       SETTING_TRACE_DEBUG
-                           (" Unknown prederred network type");
-                       break;
-               }
+                       case SETTING_NETWORK_PREFERRED_NETWORK_NEW: {
+                                       setting_view_change(&setting_view_network_preferred_network_new, &setting_view_network_preferred_network, ad);
+                                       tapi_ret = tel_get_network_preferred_plmn(ad->handle, setting_tapi_get_preferred_plmn_cb, ad);
+                                       break;
+                               }
+
+                       case SETTING_NETWORK_PREFERRED_NETWORK_LIST: {
+
+                                       setting_view_change(&setting_view_network_preferred_network_list, &setting_view_network_preferred_network, ad);
+                                       tapi_ret = tel_get_network_preferred_plmn(ad->handle, setting_tapi_get_preferred_plmn_cb, ad);
+                                       break;
+                               }
+
+                       case SETTING_NETWORK_PREFERRED_NETWORK_EDIT: {
+                                       setting_view_change(&setting_view_network_preferred_network_edit, &setting_view_network_preferred_network,
+                                                           ad);
+                                       tapi_ret = tel_get_network_preferred_plmn(ad->handle, setting_tapi_get_preferred_plmn_cb, ad);
+                                       break;
+                               }
+                       case SETTING_NETWORK_PREFERRED_NETWORK_DELETE: {
+                                       setting_network_preferred_network_delete_ok
+                                       (ad);
+                                       return;
+                               }
+                       default: {
+                                       SETTING_TRACE_DEBUG
+                                       (" Unknown prederred network type");
+                                       break;
+                               }
                }
 
                if (tapi_ret !=
                    TAPI_API_SUCCESS) {
                        SETTING_TRACE_ERROR
-                           ("*** [ERR] tel_get_network_preferred_plmn. err=%d ***",
-                            tapi_ret);
+                       ("*** [ERR] tel_get_network_preferred_plmn. err=%d ***",
+                        tapi_ret);
                }
        }
 
@@ -766,50 +1348,46 @@ void setting_tapi_get_preferred_plmn_cb(TapiHandle *handle, int result, void *da
        setting_network_popup_delete(ad);
 
        if (result == TAPI_NETWORK_NO_ERR) {
-               memcpy(&(ad->pref_list), data,sizeof(TelNetworkPreferredPlmnList_t));
+               memcpy(&(ad->pref_list), data, sizeof(TelNetworkPreferredPlmnList_t));
 
-               SETTING_TRACE("*********** ad->op_type = %d",ad->op_type);
-               SETTING_TRACE("ad->pref_list.NumOfPrefPlmns:%d",ad->pref_list.NumOfPrefPlmns);
+               SETTING_TRACE("*********** ad->op_type = %d", ad->op_type);
+               SETTING_TRACE("ad->pref_list.NumOfPrefPlmns:%d", ad->pref_list.NumOfPrefPlmns);
                switch (ad->op_type) {
-               case SETTING_NETWORK_PREFERRED_NETWORK_DELETE:
-               {
-                       setting_network_preferred_network_delete_draw_network_list(ad);
-                       break;
-               }
-               default:
-               {
-                       setting_network_preferred_network_refresh_view
-                           (ad);
-                       char info[MAX_DISPLAY_NAME_LEN_ON_UI] = { 0 };
-                       if (ad->pref_list.NumOfPrefPlmns > 1) {
-                               snprintf(info, sizeof(info), "Get %d preferred networks",
-                                    ad->pref_list.NumOfPrefPlmns);
-                       } else {
-                               snprintf(info, sizeof(info), "Get %d preferred network",
-                                    ad->pref_list.NumOfPrefPlmns);
-                       }
-                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _(info), NULL, POPUP_INTERVAL, FALSE, FALSE);
-                       break;
-               }
+                       case SETTING_NETWORK_PREFERRED_NETWORK_DELETE: {
+                                       setting_network_preferred_network_delete_draw_network_list(ad);
+                                       break;
+                               }
+                       default: {
+                                       setting_network_preferred_network_refresh_view
+                                       (ad);
+                                       char info[MAX_DISPLAY_NAME_LEN_ON_UI] = { 0 };
+                                       if (ad->pref_list.NumOfPrefPlmns > 1) {
+                                               snprintf(info, sizeof(info), "Get %d preferred networks",
+                                                        ad->pref_list.NumOfPrefPlmns);
+                                       } else {
+                                               snprintf(info, sizeof(info), "Get %d preferred network",
+                                                        ad->pref_list.NumOfPrefPlmns);
+                                       }
+                                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _(info), NULL, POPUP_INTERVAL, FALSE, FALSE);
+                                       break;
+                               }
                }
        } else {
                switch (ad->op_type) {
-               case SETTING_NETWORK_PREFERRED_NETWORK_DELETE:
-               {
-                       setting_network_preferred_network_delete_failed
-                           (ad);
-                       break;
-               }
-               default:
-               {
-                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_Failed_Get_PreferNetwork), NULL, POPUP_INTERVAL, FALSE, FALSE);
-                       break;
-               }
+                       case SETTING_NETWORK_PREFERRED_NETWORK_DELETE: {
+                                       setting_network_preferred_network_delete_failed
+                                       (ad);
+                                       break;
+                               }
+                       default: {
+                                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _(keyStr_Failed_Get_PreferNetwork), NULL, POPUP_INTERVAL, FALSE, FALSE);
+                                       break;
+                               }
                }
        }
 }
 
-void __register_network(Setting_GenGroupItem_Datalist_item)
+void __register_network(Setting_GenGroupItem_Data *list_item)
 {
        SETTING_TRACE_BEGIN;
        ret_if(list_item == NULL);
@@ -819,12 +1397,11 @@ void __register_network(Setting_GenGroupItem_Data* list_item)
 
        int tapi_ret = TAPI_API_INVALID_INPUT;
 
-       //cancel the searching operation
+       /*cancel the searching operation */
 
-       if (ad->data_search_network_item)
-       {
-           elm_object_item_del(ad->data_search_network_item->item);
-           ad->data_search_network_item = NULL;
+       if (ad->data_search_network_item) {
+               elm_object_item_del(ad->data_search_network_item->item);
+               ad->data_search_network_item = NULL;
        }
 
        if (ad->b_searching_network) {
@@ -832,40 +1409,49 @@ void __register_network(Setting_GenGroupItem_Data* list_item)
                tapi_ret = tel_cancel_network_manual_search(ad->handle, setting_tapi_cancel_manual_search_cb, ad);
                if (tapi_ret != TAPI_API_SUCCESS) {
                        SETTING_TRACE_ERROR("*** [ERR] tel_cancel_network_manual_search. "\
-                                           "tapi_ret=%d ***", tapi_ret);
-               }
-               else
-               {
+                                           "tapi_ret=%d ***", tapi_ret);
+               } else {
                        ad->b_searching_network = FALSE;
                }
        }
 
-       if (0 == safeStrCmp(list_item->keyStr, "IDS_COM_BODY_AUTOMATIC")) {
+       if (0 == safeStrCmp(list_item->keyStr, "IDS_COM_BODY_SELECT_AUTOMATICALLY")) {
                ad->sel_net = TAPI_NETWORK_SELECTIONMODE_AUTOMATIC;
                SETTING_TRACE("Sending tel_select_network_automatic..");
                tapi_ret = tel_select_network_automatic(ad->handle, setting_tapi_set_plmn_mode_cb, ad);
                if (tapi_ret != TAPI_API_SUCCESS) {
-                   SETTING_TRACE_DEBUG("*** [ERR] tel_select_network_automatic."\
-                                           " tapi_ret=%d ***",tapi_ret);
+                       SETTING_TRACE_DEBUG("*** [ERR] tel_select_network_automatic."\
+                                           " tapi_ret=%d ***", tapi_ret);
                } else {
-                       ad->network_ug_pop = setting_create_popup_without_btn(ad, ad->win_get, NULL,
-                                                        _("IDS_COM_POP_PROCESSING"), NULL,
-                                                        0.0, TRUE, TRUE);
 
-                       if (ad->data_auto_network_item)
-                       {
-                               //ad->data_auto_network_item->sub_desc = (char *)g_strdup("....");
-                               //elm_genlist_item_item_class_update(ad->data_auto_network_item->item, &(itc_2text_1icon_6));
+                       /* Display 'Registering' popup when automatic */
+                       SETTING_TRACE("Automatic selection, Registering..")
+
+                       if (ad->network_select_registering_pop != NULL) {
+                               evas_object_del(ad->network_select_registering_pop);
+                               ad->network_select_registering_pop = NULL;
+                       }
+
+                       ad->network_select_registering_pop = __create_registering_popup(list_item);
+                       if (ad->network_select_registering_pop) {
+                               SETTING_TRACE("Registering popup appeared");
+                       } else {
+                               SETTING_TRACE("Registering popup failed");
+                       }
+
+                       if (ad->data_auto_network_item) {
+                               /*ad->data_auto_network_item->sub_desc = (char *)g_strdup("...."); */
+                               /*elm_genlist_item_item_class_update(ad->data_auto_network_item->item, &(itc_2text_1icon_6)); */
                                char *sub_text = setting_customize_text("....", 0, BLUE_COLOR, NULL);
                                ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
                                FREE(sub_text);
                                elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
-                               elm_genlist_item_update( ad->data_auto_network_item->item);
+                               elm_genlist_item_update(ad->data_auto_network_item->item);
                        }
 
                        ad->b_set_manul_network = FALSE;
                        ad->b_set_auto_network = TRUE;
-                       ad->sel_act = -1;//means "Automatic"
+                       ad->sel_act = -1;/*means "Automatic" */
                }
        } else {
                ad->sel_net = TAPI_NETWORK_SELECTIONMODE_MANUAL;
@@ -874,56 +1460,66 @@ void __register_network(Setting_GenGroupItem_Data* list_item)
 
                int cnt = 0;
                SETTING_TRACE("ad->plmn_info.networks_count:%d",
-                               ad->plmn_info.networks_count);
+                             ad->plmn_info.networks_count);
                char name[MAX_COMMON_BUFFER_LEN] = {0, };
-               for(; cnt < ad->plmn_info.networks_count; cnt++)
-               {
+               for (; cnt < ad->plmn_info.networks_count; cnt++) {
                        SETTING_TRACE("ad->plmn_info.network_list[cnt].network_name:%s",
-                                       ad->plmn_info.network_list[cnt].network_name);
+                                     ad->plmn_info.network_list[cnt].network_name);
                        memset(name, 0, MAX_COMMON_BUFFER_LEN);
-                       snprintf(name, MAX_COMMON_BUFFER_LEN, "%s (%s)",
-                                ad->plmn_info.network_list[cnt].network_name,
-                                setting_network_get_act_str(ad->plmn_info.network_list[cnt].access_technology));
+                       snprintf(name, MAX_COMMON_BUFFER_LEN, "%s",
+                                ad->plmn_info.network_list[cnt].network_name);
+                       /*SETTING_TRACE("name:%s", name); */
 
-                       if(!safeStrCmp(list_item->keyStr, name))
-                       {
+                       char speciliztion[MAX_COMMON_BUFFER_LEN] = {0, };
+                       __process_special_char(speciliztion, name);
+
+                       SETTING_TRACE("  name:%s", speciliztion);
+
+                       if (!safeStrCmp(list_item->keyStr, speciliztion)) {
+                               SETTING_TRACE("find the right item");
                                break;
                        }
                }
 
-
                SETTING_TRACE_DEBUG("*** [Selected PLMN] name=%s, "\
-                               "srv provider=%s, PLMN ID=%u, type=%d, "\
-                               "access tech=%d ***",
-                               ad->plmn_info.network_list[cnt].network_name,
-                               ad->plmn_info.network_list[cnt].service_provider_name,
-                               ad->plmn_info.network_list[cnt].plmn_id,
-                               (int)(ad->plmn_info.network_list[cnt].type_of_plmn),
-                               (int)(ad->plmn_info.network_list[cnt].access_technology));
-
-               //ASYNC API - TAPI_EVENT_NETWORK_SELECT_CNF
+                                   "srv provider=%s, PLMN ID=%s, type=%d, "\
+                                   "access tech=%d ***",
+                                   ad->plmn_info.network_list[cnt].network_name,
+                                   ad->plmn_info.network_list[cnt].service_provider_name,
+                                   ad->plmn_info.network_list[cnt].plmn,
+                                   (int)(ad->plmn_info.network_list[cnt].type_of_plmn),
+                                   (int)(ad->plmn_info.network_list[cnt].access_technology));
+
+               /*ASYNC API - TAPI_EVENT_NETWORK_SELECT_CNF */
                SETTING_TRACE("Sending tel_select_network_manual..");
-               char plmn_id[MAX_COMMON_BUFFER_LEN] = {0, };
-               snprintf(plmn_id, MAX_COMMON_BUFFER_LEN, "%d", ad->plmn_info.network_list[cnt].plmn_id);
-
                tapi_ret = tel_select_network_manual(ad->handle,
-                                       plmn_id, ad->plmn_info.network_list[cnt].access_technology,
-                                       setting_tapi_set_plmn_mode_cb, ad);
-               if(tapi_ret != TAPI_API_SUCCESS)
-               {
+                                                    ad->plmn_info.network_list[cnt].plmn,
+                                                    ad->plmn_info.network_list[cnt].access_technology,
+                                                    setting_tapi_set_plmn_mode_cb, ad);
+               if (tapi_ret != TAPI_API_SUCCESS) {
                        SETTING_TRACE_DEBUG("%s*** [ERR] "\
-                                       "tel_select_network_manual. "\
-                                       "tapi_ret=%d ***%s", SETTING_FONT_RED,
-                                       tapi_ret, SETTING_FONT_BLACK);
+                                           "tel_select_network_manual. "\
+                                           "tapi_ret=%d ***%s", SETTING_FONT_RED,
+                                           tapi_ret, SETTING_FONT_BLACK);
                        setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_ST_BODY_FAILED_TO_SELECT_NETWORK"), NULL, POPUP_INTERVAL, FALSE, FALSE);
 
                        return;
-               }
-               else
-               {
-                       ad->network_ug_pop = setting_create_popup_without_btn(ad, ad->win_get, NULL,
-                                                        _("IDS_COM_POP_PROCESSING"), NULL,
-                                                        0.0, TRUE, TRUE);
+               } else {
+                       /* Display 'Registering' popup when manual */
+                       SETTING_TRACE("Manual selection, Registering..")
+
+                       if (ad->network_select_registering_pop != NULL) {
+                               evas_object_del(ad->network_select_registering_pop);
+                               ad->network_select_registering_pop = NULL;
+                       }
+
+                       ad->network_select_registering_pop = __create_registering_popup(list_item);
+                       if (ad->network_select_registering_pop) {
+                               SETTING_TRACE("Registering popup appeared");
+                       } else {
+                               SETTING_TRACE("Registering popup failed");
+                       }
+
                        ad->sel_act = ad->plmn_info.network_list[cnt].access_technology;
                        FREE(ad->sel_network);
                        ad->sel_network = strdup(ad->plmn_info.network_list[cnt].network_name);
@@ -931,16 +1527,294 @@ void __register_network(Setting_GenGroupItem_Data* list_item)
        }
 }
 
+static void __ignore_back_key_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       return;
+}
+
+static Evas_Object *__create_registering_popup(void *data)
+{
+       SETTING_TRACE_BEGIN;
+
+       retv_if(!data, NULL);
+
+       Setting_GenGroupItem_Data       *list_item = (Setting_GenGroupItem_Data *)data;
+       SettingNetworkUG                        *ad = list_item->userdata;
+
+       Evas_Object *popup = elm_popup_add(ad->win_get);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, __ignore_back_key_cb, list_item);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       Evas_Object *box = elm_box_add(popup);
+
+       elm_box_horizontal_set(box, EINA_TRUE);
+       elm_box_align_set(box, 0.5, 0.5);
+       elm_box_padding_set(box, 16, 0);
+
+       Evas_Object *progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, PROGRESSBAR_STYLE);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+       evas_object_show(progressbar);
+       elm_box_pack_end(box, progressbar);
+
+       Evas_Object *label = elm_label_add(popup);
+       elm_object_text_set(label, _("IDS_ST_POP_REGISTERING_ING"));
+       evas_object_show(label);
+       elm_box_pack_end(box, label);
+
+       /*evas_object_show(box); */
+       /*elm_object_content_set(popup, box); */
+
+       Evas_Object *table = elm_table_add(popup);
+       evas_object_show(table);
+       elm_table_homogeneous_set(table, EINA_FALSE);
+
+       Evas_Object *rect_up;
+       rect_up = evas_object_rectangle_add(evas_object_evas_get(popup));
+       evas_object_size_hint_min_set(rect_up, ELM_SCALE_SIZE(170), ELM_SCALE_SIZE(34));
+
+       Evas_Object *rect_down;
+       rect_down = evas_object_rectangle_add(evas_object_evas_get(popup));
+       evas_object_size_hint_min_set(rect_down, ELM_SCALE_SIZE(100), ELM_SCALE_SIZE(34));
+
+       elm_table_pack(table, rect_up, 0, 0, 2, 1);/* rect as a padding */
+       elm_table_pack(table, box, 1, 1, 1, 1);
+       elm_table_pack(table, rect_down, 2, 2, 2, 1);/* rect as a padding */
+
+       evas_object_show(box);
+
+       elm_object_content_set(popup, table);
+
+       evas_object_show(popup);
+
+       return popup;
+}
+
+/*
+ * Cancel for searching network
+ */
+static void __search_network_cancel_cb(void *data, Evas_Object *obj,
+                                       void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!data);
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
+       SettingNetworkUG *ad = list_item->userdata;
+
+       if (ad->popup) {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+       if (ad->b_searching_network) {
+               SETTING_TRACE("Sending tel_cancel_network_manual_search..");
+               int tapi_ret = tel_cancel_network_manual_search(ad->handle, setting_tapi_cancel_manual_search_cb, ad);
+               if (tapi_ret != TAPI_API_SUCCESS) {
+                       SETTING_TRACE_ERROR("*** [ERR] tel_cancel_network_manual_search. "\
+                                           "tapi_ret=%d ***", tapi_ret);
+               } else {
+                       ad->b_searching_network = FALSE;
+               }
+       }
+
+       /* Restore selection automatically */
+       int sel_net;
+
+       vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &sel_net);
+       SETTING_TRACE("Previous selection after searching network:%d", sel_net);
+
+       if (sel_net == TAPI_NETWORK_SELECTIONMODE_AUTOMATIC) {
+               list_item->chk_status = 1;
+               elm_genlist_item_update(list_item->item);
+       }
+}
+
+Evas_Object *__create_searching_popup(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(!data, NULL);
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
+       SettingNetworkUG *ad = list_item->userdata;
+
+       Evas_Object *popup = elm_popup_add(ad->ly_main);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, __search_network_cancel_cb, list_item);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+
+       Evas_Object *box = elm_box_add(popup);
+
+       elm_box_horizontal_set(box, EINA_TRUE);
+       elm_box_align_set(box, 0.5, 0.5);
+       elm_box_padding_set(box, 16, 0);
+
+       Evas_Object *progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, PROGRESSBAR_STYLE);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+       evas_object_show(progressbar);
+       elm_box_pack_end(box, progressbar);
+
+       Evas_Object *label = elm_label_add(popup);
+       elm_object_text_set(label, _("IDS_COM_POP_SEARCHING"));
+       evas_object_show(label);
+       elm_box_pack_end(box, label);
+
+       /*evas_object_show(box); */
+       /*elm_object_content_set(popup, box); */
+
+       Evas_Object *table = elm_table_add(popup);
+       evas_object_show(table);
+       elm_table_homogeneous_set(table, EINA_FALSE);
+
+       Evas_Object *rect_up;
+       rect_up = evas_object_rectangle_add(evas_object_evas_get(popup));
+       evas_object_size_hint_min_set(rect_up, ELM_SCALE_SIZE(170), ELM_SCALE_SIZE(34));
+
+       Evas_Object *rect_down;
+       rect_down = evas_object_rectangle_add(evas_object_evas_get(popup));
+       evas_object_size_hint_min_set(rect_down, ELM_SCALE_SIZE(100), ELM_SCALE_SIZE(34));
+
+       elm_table_pack(table, rect_up, 0, 0, 2, 1);/* rect as a padding */
+       elm_table_pack(table, box, 1, 1, 1, 1);
+       elm_table_pack(table, rect_down, 2, 2, 2, 1);/* rect as a padding */
+
+       evas_object_show(box);
+
+       elm_object_content_set(popup, table);
+
+       evas_object_show(popup);
+
+       return popup;
+}
+
+static Eina_Bool __search_net_on_timer(void *data)
+{
+       /* error check */
+       SETTING_TRACE_BEGIN;
+       retv_if(data == NULL, EINA_FALSE);
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
+       SettingNetworkUG *ad = list_item->userdata;
+       retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "ad is NULL");
+
+       /*
+       if (ad->popup)
+       {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+       */
+
+       int tapi_ret;
+       /*searching list */
+       tapi_ret = tel_search_network(ad->handle, setting_tapi_search_network_cb, ad); /*ASYNC API - TAPI_EVENT_NETWORK_SEARCH_CNF */
+       if (tapi_ret != TAPI_API_SUCCESS) { /* error handling.. */
+               SETTING_TRACE_ERROR("%s*** [ERR] tel_search_network. tapi_ret=%d ***%s", SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
+               setting_create_popup_without_btn(ad, ad->win_get, NULL, _(STR_SETTING_OPERATION_FAILED), NULL, POPUP_INTERVAL, FALSE, FALSE);
+
+               /* put error handler on the end of this function. */
+               /*rollback.. */
+               setting_update_gl_item_chk_status(ad->data_auto_network_item, 1);
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       ad->b_searching_network = TRUE;
+       /*
+       setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_TOP);
+       ad->data_search_network_item = setting_create_Gendial_field_1radio(
+                                                       ad->genlist_sel_network,
+                                                       &itc_1icon,
+                                                       NULL, NULL,
+                                                       SWALLOW_Type_1RADIO_1SEARCH,
+                                                       ad->chk_sel, -1, NULL, NULL);
+       elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       setting_genlist_item_groupstyle_set(ad->data_search_network_item, SETTING_GROUP_STYLE_BOTTOM);
+       */
+       if (ad->popup) {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+       ad->popup = __create_searching_popup(list_item);
+       if (ad->data_auto_network_item) {
+               /*elm_genlist_item_item_class_update(ad->data_auto_network_item->item, &(itc_2text_1icon_7)); */
+
+               char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, GRAY_COLOR, NULL);
+               ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
+               FREE(sub_text);
+               elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
+               elm_genlist_item_update(ad->data_auto_network_item->item);
+       }
+
+       /*ecore_timer_del(ad->timer); */
+       ad->timer = NULL;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void __switch_automatic_on_resp_cb(void *data, Evas_Object *obj,
+                                   void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "Data parameter is NULL");
+
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
+       SettingNetworkUG *ad = list_item->userdata;
+       int response_type = btn_type(obj);
+       if (ad->popup) {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+
+       if (POPUP_RESPONSE_OK == response_type) {
+
+               /* Not used, Searching network directly.
+               //changing of USE_PACKET_DATA was trigged by betwork searching
+               ad->b_trigged_by_searching = TRUE;
+
+               //for delay..
+               ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
+                                        PROGRESSBAR_STYLE,
+                                        NULL, NULL, NULL, 0, TRUE, FALSE);
+
+               if (ad->timer) {
+                       ecore_timer_del(ad->timer);
+                       ad->timer = NULL;
+               }
+               ad->timer = ecore_timer_add(TIME_TO_TURN_OFF_3G, __search_net_on_timer, list_item);
+               */
+
+               __search_net_on_timer(list_item);
+
+       } else if (POPUP_RESPONSE_CANCEL == response_type) {
+
+               /* Restore selection automatically */
+               int sel_net, chk_status;
+
+               vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &sel_net);
+               SETTING_TRACE("Previous selection after searching network:%d", sel_net);
+
+               if (sel_net == TAPI_NETWORK_SELECTIONMODE_AUTOMATIC)
+                       chk_status = 1;
+               else
+                       chk_status = 0;
+
+               setting_update_gl_item_chk_status(ad->data_auto_network_item, chk_status);
+       }
+}
 
 void __switch_automatic_network(Setting_GenGroupItem_Data *list_item)
 {
        SETTING_TRACE_BEGIN;
        ret_if(!list_item || !list_item->userdata || !list_item->keyStr);
-       ret_if(0 != safeStrCmp(list_item->keyStr, "IDS_COM_BODY_AUTOMATIC"));
+       ret_if(0 != safeStrCmp(list_item->keyStr, "IDS_COM_BODY_SELECT_AUTOMATICALLY"));
        SettingNetworkUG *ad = list_item->userdata;
        SETTING_TRACE("The value of toogle changes to be %d", list_item->chk_status);
-       if (list_item->chk_status) //set automatic
-       {
+       if (list_item->chk_status) {
+               /* Automatic selected */
                Elm_Object_Item *last_item = elm_genlist_last_item_get(ad->genlist_sel_network);
                SETTING_TRACE("ad->data_auto_network_item->item:%p", ad->data_auto_network_item->item);
                for (;;) {
@@ -953,60 +1827,80 @@ void __switch_automatic_network(Setting_GenGroupItem_Data *list_item)
                }
 
                __register_network(list_item);
+               setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_NONE);
+       } else {
+               setting_network_searching_network(list_item);
        }
-       else //select a plmn
-       {
-               //__register_network(list_item);
-               int err;
-               int old_pdp_value = 0;
-               int old_roaming_value = 0;
-               setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &old_pdp_value, &err);
-               setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, &old_roaming_value, &err);
-               if (old_pdp_value)
-               {
-                       SETTING_TRACE("Disable user packet data");
-                       setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, FALSE, &err);
-                       ad->net_restore++;
-                       if (old_roaming_value)
-                       {
-                               SETTING_TRACE("Disable data roaming");
-                               setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, FALSE, &err);
-                               ad->net_restore++;
-                       }
-                       #ifdef FUTURE_FEATURE //feature in the future.
-                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _(NotifyStr_PDP_OFF), NULL, POPUP_INTERVAL, FALSE, FALSE);
-                       #endif
-               }
-               int tapi_ret;
-               //searching list
-               tapi_ret = tel_search_network(ad->handle, setting_tapi_search_network_cb, ad); //ASYNC API - TAPI_EVENT_NETWORK_SEARCH_CNF
-               if(tapi_ret != TAPI_API_SUCCESS) { // error handling..
-                       SETTING_TRACE_ERROR("%s*** [ERR] tel_search_network. tapi_ret=%d ***%s", SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _(STR_SETTING_OPERATION_FAILED), NULL, POPUP_INTERVAL, FALSE, FALSE);
-
-                       // put error handler on the end of this function.
-                       //rollback..
-                       list_item->chk_status = TRUE;
-                       elm_check_state_set(list_item->eo_check, list_item->chk_status);
-                       return;
-               }
-               ad->b_searching_network = TRUE;
-               ad->data_search_network_item = setting_create_Gendial_field_1radio(
-                                                               ad->genlist_sel_network,
-                                                               &itc_1text_2icon_2,
-                                                               NULL, NULL,
-                                                               SWALLOW_Type_1RADIO_1SEARCH,
-                                                               ad->chk_sel, -1, NULL, NULL);
-               if (ad->data_auto_network_item)
-               {
-                       //elm_genlist_item_item_class_update(ad->data_auto_network_item->item, &(itc_2text_1icon_7));
-                       char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, GRAY_COLOR, NULL);
-                       ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
-                       FREE(sub_text);
-                       elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
-                       elm_genlist_item_update( ad->data_auto_network_item->item);
-               }
+}
+
+/*
+ * Network selection / Searching network
+ */
+void
+setting_network_searching_network(Setting_GenGroupItem_Data *list_item)
+{
+       SETTING_TRACE_BEGIN;
+
+       SettingNetworkUG *ad = list_item->userdata;
+
+       /* Manual selected */
+       /*__register_network(list_item); */
+
+       int value_use_packet;
+       vconf_get_int(VCONFKEY_DNET_STATE, &value_use_packet);
+
+       SETTING_TRACE("ad->sel_net:%d", ad->sel_net);
+       if (value_use_packet != VCONFKEY_DNET_OFF) {
+               ad->popup =
+                   setting_create_popup_with_btn(list_item, ad->ly_main,
+                                                 NULL, _(SETTING_NETWORK_SEARCH_3G_ON_DESC),
+                                                 __switch_automatic_on_resp_cb,
+                                                 0, 2, _("IDS_COM_SK_OK"), _("IDS_COM_SK_CANCEL"));
+               /*0, 2, _("IDS_ST_BUTTON_DISCONNECT"),_("IDS_COM_SK_CANCEL")); */
+               return;
        }
+
+       int tapi_ret;
+       /*searching list */
+       tapi_ret = tel_search_network(ad->handle, setting_tapi_search_network_cb, ad); /*ASYNC API - TAPI_EVENT_NETWORK_SEARCH_CNF */
+       if (tapi_ret != TAPI_API_SUCCESS) { /* error handling.. */
+               SETTING_TRACE_ERROR("%s*** [ERR] tel_search_network. tapi_ret=%d ***%s", SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
+               setting_create_popup_without_btn(ad, ad->win_get, NULL, _(STR_SETTING_OPERATION_FAILED), NULL, POPUP_INTERVAL, FALSE, FALSE);
+
+               /* put error handler on the end of this function. */
+               /*rollback.. */
+               setting_update_gl_item_chk_status(list_item, 1);
+               return;
+       }
+
+       ad->b_searching_network = TRUE;
+       /*latest UI: show progress popup instead of progress item
+       setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_TOP);
+       ad->data_search_network_item = setting_create_Gendial_field_1radio(
+                                                       ad->genlist_sel_network,
+                                                       &itc_1icon,
+                                                       NULL, NULL,
+                                                       SWALLOW_Type_1RADIO_1SEARCH,
+                                                       ad->chk_sel, -1, NULL, NULL);
+       elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       setting_genlist_item_groupstyle_set(ad->data_search_network_item, SETTING_GROUP_STYLE_BOTTOM);
+       */
+       if (ad->popup) {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+       ad->popup = __create_searching_popup(list_item);
+       if (ad->data_auto_network_item) {
+               /*elm_genlist_item_item_class_update(ad->data_auto_network_item->item, &(itc_2text_1icon_7)); */
+
+               char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, GRAY_COLOR, NULL);
+               ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
+               FREE(sub_text);
+               elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
+               elm_genlist_item_update(ad->data_auto_network_item->item);
+       }
+
+       return;
 }
 
 void setting_network_select_network_chk_changed(void *data, Evas_Object *obj, void *event_info)
@@ -1014,15 +1908,13 @@ void setting_network_select_network_chk_changed(void *data, Evas_Object *obj, vo
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL || obj == NULL, "Parameter is NULL");
        Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
-       if (0 == safeStrCmp(list_item->keyStr, "IDS_COM_BODY_AUTOMATIC"))
-       {
+       if (0 == safeStrCmp(list_item->keyStr, "IDS_COM_BODY_SELECT_AUTOMATICALLY")) {
                list_item->chk_status = elm_check_state_get(obj);
                __switch_automatic_network(list_item);
-       }
-       else //"IDS_COM_BODY_AUTOMATIC"
-       {
+       } else { /*"IDS_COM_BODY_SELECT_AUTOMATICALLY" */
                list_item->chk_status = elm_radio_value_get(obj);
-               SETTING_TRACE("The value of radio changes to be %d", list_item->chk_status);
+               SETTING_TRACE("[Radio index:%d] Radio checked", list_item->chk_status);
+
                __register_network(list_item);
        }
 
@@ -1034,69 +1926,74 @@ void setting_network_Gendial_select_plmn_cb(void *data, Evas_Object *obj, void *
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL || event_info == NULL, "Parameter is NULL");
 
-       SettingNetworkUG *ad = (SettingNetworkUG*)data;
-       Elm_Object_Item *item = (Elm_Object_Item*)event_info;
+       SettingNetworkUG *ad = (SettingNetworkUG *)data;
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
        elm_genlist_item_selected_set(item, 0);
-       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data*)elm_object_item_data_get(item);
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
 
        SETTING_TRACE("list_item->keyStr:%s", list_item->keyStr);
-       if (0 == safeStrCmp(list_item->keyStr, "IDS_COM_BODY_AUTOMATIC"))
-       {
-               list_item->chk_status = !elm_check_state_get(list_item->eo_check);
-               elm_check_state_set(list_item->eo_check, list_item->chk_status);
+       if (0 == safeStrCmp(list_item->keyStr, "IDS_COM_BODY_SELECT_AUTOMATICALLY")) {
+               setting_update_gl_item_chk_status(list_item, !(list_item->chk_status));
                __switch_automatic_network(list_item);
                return;
-       }
-       else
-       {
-               int old_chk_status = elm_radio_value_get(ad->chk_sel);
-               if (old_chk_status != list_item->chk_status)
-               {
-                       SETTING_TRACE("The value of radio changes to be %d",
-                                       list_item->chk_status);
+       } else {
+               if (ad->b_searching_network) {
+                       SETTING_TRACE("Searching poup displaying, Cannot select");
+                       return;
+               }
+
+               int chk_status = elm_radio_value_get(ad->chk_sel);
+               if (chk_status != list_item->chk_status) {
+                       SETTING_TRACE("[List index:%d] List selected (radio index:%d)", list_item->chk_status, chk_status);
                        elm_radio_value_set(ad->chk_sel, list_item->chk_status);
                        __register_network(list_item);
+               } else {
+                       SETTING_TRACE("[List index:%d] Skip becuase radio checked (radio index:%d)", list_item->chk_status, chk_status);
                }
        }
 }
+
+/**
+ * [UI] update
+ */
 void setting_network_update_sel_network(void *data)
 {
-       //SETTING_TRACE_BEGIN;
+       /*SETTING_TRACE_BEGIN; */
        SettingNetworkUG *ad = data;
-       //SETTING_TRACE("ad->sel_net:%d", ad->sel_net);
-       //SETTING_TRACE("ad->sel_network:%s", ad->sel_network);
-       //SETTING_TRACE("sel_act = [%s(%d)]", setting_network_get_act_str(ad->sel_act),ad->sel_act);
+       /*SETTING_TRACE("ad->sel_net:%d", ad->sel_net); */
+       /*SETTING_TRACE("ad->sel_network:%s", ad->sel_network); */
+       /*SETTING_TRACE("sel_act = [%s(%d)]", setting_network_get_act_str(ad->sel_act),ad->sel_act); */
 
        if (ad->data_auto_network_item) {
-               if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net)
-               {
-                  SETTING_TRACE_DEBUG("After set as Automatic, update "\
-                                  "ad->data_auto_network_item to be [%s]",
-                                  ad->sel_network);
-                  //ad->data_auto_network_item->sub_desc = (char *)g_strdup(_(ad->sel_network));
-                  char *sub_text = setting_customize_text(_(ad->sel_network), 0, BLUE_COLOR, NULL);
-                  ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
-                  FREE(sub_text);
-                  elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
-                  elm_genlist_item_update( ad->data_auto_network_item->item);
+               if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net) {
+                       /*SETTING_TRACE_DEBUG("After set as Automatic, update " */
+                       /*                 "ad->data_auto_network_item to be [%s]", */
+                       /*                 ad->sel_network); */
+                       /*ad->data_auto_network_item->sub_desc = (char *)g_strdup(_(ad->sel_network)); */
+                       char *sub_text = setting_customize_text(_(ad->sel_network), 0, BLUE_COLOR, NULL);
+                       SETTING_TRACE("sub_text:%s", sub_text);
+                       G_FREE(ad->data_auto_network_item->sub_desc);
+                       ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
+                       elm_object_item_data_set(ad->data_auto_network_item->item, ad->data_auto_network_item);
+                       elm_genlist_item_update(ad->data_auto_network_item->item);
+                       elm_genlist_item_fields_update(ad->data_auto_network_item->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
+                       FREE(sub_text);
                } else {
                }
        }
 
-       if (ad->data_sel_net)//it indicates TAPI is not responsed in time
-       {
+       if (ad->data_sel_net) { /*it indicates TAPI is not responsed in time */
                char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
                if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net) {
                        snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
-                                "%s, %s", _("IDS_COM_BODY_AUTOMATIC"), _(ad->sel_network));
+                                "%s, %s", _("IDS_COM_BODY_AUTOMATIC"), _(ad->sel_network));
 
                } else {
                        snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
-                                "%s, %s (%s)", _("IDS_COM_BODY_MANUAL"), _(ad->sel_network),
-                                setting_network_get_act_str(ad->sel_act));
+                                "%s, %s", _("IDS_COM_BODY_MANUAL"), _(ad->sel_network));
                }
 
-               //SETTING_TRACE("sel_network_desc:%s", sel_network_desc);
+               /*SETTING_TRACE("sel_network_desc:%s", sel_network_desc); */
 
                G_FREE(ad->data_sel_net->sub_desc);
                ad->data_sel_net->sub_desc = (char *)g_strdup(_(sel_network_desc));
@@ -1108,88 +2005,247 @@ void setting_network_update_sel_network(void *data)
 
 const char *setting_network_get_act_str(TelNetworkSystemType_t type)
 {
-       switch (type)
-       {
-           case TAPI_NETWORK_SYSTEM_NO_SRV: //0
-               return "NO SERVICE";
-           case TAPI_NETWORK_SYSTEM_GSM: //1
-               return "GSM";
-           case TAPI_NETWORK_SYSTEM_GPRS: //2
-               return "GPRS";
-           case TAPI_NETWORK_SYSTEM_EGPRS: //3
-               return "EGPRS";
-           case TAPI_NETWORK_SYSTEM_PCS1900: //4
-               return "PCS1900";
-           case TAPI_NETWORK_SYSTEM_UMTS: //5
-               return "UMTS";
-           case TAPI_NETWORK_SYSTEM_GSM_AND_UMTS:
-               return "GSM and UMTS";
-           case TAPI_NETWORK_SYSTEM_HSDPA:
-               return "HSDPA";
-           case TAPI_NETWORK_SYSTEM_IS95A:
-               return "IS95A";
-           case TAPI_NETWORK_SYSTEM_IS95B:
-               return "IS95B";
-           case TAPI_NETWORK_SYSTEM_CDMA_1X:
-               return "CDMA 1X";
-           case TAPI_NETWORK_SYSTEM_EVDO_REV_0:
-               return "EV-DO rev0";
-           case TAPI_NETWORK_SYSTEM_1X_EVDO_REV_0_HYBRID:
-               return "1X and EV-DO rev0";
-           case TAPI_NETWORK_SYSTEM_EVDO_REV_A:
-               return "EV-DO revA";
-           case TAPI_NETWORK_SYSTEM_1X_EVDO_REV_A_HYBRID:
-               return "1X and EV-DO revA";
-           case TAPI_NETWORK_SYSTEM_EVDV:
-               return "EV-DV";
-           default:
-               return "NO SERVICE";
+       switch (type) {
+               case TAPI_NETWORK_SYSTEM_NO_SRV: /*0 */
+                       return "NO SERVICE";
+               case TAPI_NETWORK_SYSTEM_GSM: /*1 */
+                       return "GSM";
+               case TAPI_NETWORK_SYSTEM_GPRS: /*2 */
+                       return "GPRS";
+               case TAPI_NETWORK_SYSTEM_EGPRS: /*3 */
+                       return "EGPRS";
+               case TAPI_NETWORK_SYSTEM_PCS1900: /*4 */
+                       return "PCS1900";
+               case TAPI_NETWORK_SYSTEM_UMTS: /*5 */
+                       return "WCDMA";
+               case TAPI_NETWORK_SYSTEM_GSM_AND_UMTS:
+                       return "GSM/WCDMA";
+               case TAPI_NETWORK_SYSTEM_HSDPA:
+                       return "HSDPA";
+               case TAPI_NETWORK_SYSTEM_IS95A:
+                       return "IS95A";
+               case TAPI_NETWORK_SYSTEM_IS95B:
+                       return "IS95B";
+               case TAPI_NETWORK_SYSTEM_CDMA_1X:
+                       return "CDMA 1X";
+               case TAPI_NETWORK_SYSTEM_EVDO_REV_0:
+                       return "EV-DO rev0";
+               case TAPI_NETWORK_SYSTEM_1X_EVDO_REV_0_HYBRID:
+                       return "1X and EV-DO rev0";
+               case TAPI_NETWORK_SYSTEM_EVDO_REV_A:
+                       return "EV-DO revA";
+               case TAPI_NETWORK_SYSTEM_1X_EVDO_REV_A_HYBRID:
+                       return "1X and EV-DO revA";
+               case TAPI_NETWORK_SYSTEM_EVDV:
+                       return "EV-DV";
+               case TAPI_NETWORK_SYSTEM_LTE:
+                       return "LTE";
+               default:
+                       return "NO SERVICE";
+       }
+}
+
+bool setting_network_equal_profile(connection_profile_h pf1, connection_profile_h pf2)
+{
+       if (!pf1 && !pf2) {
+               SETTING_TRACE("Both profile are NULL, return TRUE");
+               return TRUE;
+       } else if (!pf1 || !pf2) {
+               SETTING_TRACE("One profile is NULL, one is not, return FALSE");
+               return FALSE;
+       }
+
+       connection_profile_type_e type1, type2;
+       connection_cellular_service_type_e srvtype1, srvtype2;
+       char *apn1, *apn2, *name1, *name2;
+       type1 = type2 = srvtype1 = srvtype2 = 0; /*intialize */
+       apn1 = apn2 = name1 = name2 = NULL;
+
+       (void)connection_profile_get_type(pf1, &type1);
+       (void)connection_profile_get_type(pf2, &type2);
+       (void)connection_profile_get_cellular_service_type(pf1, &srvtype1);
+       (void)connection_profile_get_cellular_service_type(pf2, &srvtype2);
+
+       (void)connection_profile_get_cellular_apn(pf1, &apn1);
+       (void)connection_profile_get_cellular_apn(pf2, &apn2);
+       (void)connection_profile_get_name(pf1, &name1);
+       (void)connection_profile_get_name(pf2, &name2);
+
+       if (type1 == type2
+           && srvtype1 == srvtype2
+           && 0 == safeStrCmp(apn1, apn2)
+           && 0 == safeStrCmp(name1, name1)) {
+               SETTING_TRACE("They have same key fields, return TRUE.");
+               FREE(apn1);
+               FREE(apn2);
+               return TRUE;
+       } else {
+               SETTING_TRACE("They don't have same key fields, return FALSE.");
+               FREE(apn1);
+               FREE(apn2);
+               return FALSE;
        }
 }
 
-UG_MODULE_API int setting_plugin_reset(service_h service, void *priv)
+#define MAX_ID_LEN 512
+static int __profile_item_sort_cb(const void *d1, const void *d2)
 {
        SETTING_TRACE_BEGIN;
-       int ret = 0;
-       /* network         */
-#if SUPPORT_RUN_SYSTEM_COMMAND
-       ret += excuteCmd(SETTING_POSTINST_FILE, 1, "network");
-#else
-       ret += vconf_set_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, TAPI_NETWORK_SELECTIONMODE_AUTOMATIC);
-       ret += vconf_set_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, 0);
-       ret += vconf_set_int(VCONFKEY_SETAPPL_NETWORK_MODE_INT, TAPI_NETWORK_BAND_TYPE_ANY);
-       ret += vconf_set_bool(VCONFKEY_3G_ENABLE, TRUE);
-       ret += vconf_set_bool(VCONFKEY_SETAPPL_STATE_DATA_ROAMING_BOOL, TRUE);
-#endif
+       connection_profile_h pf1 = (connection_profile_h)d1;
+       connection_profile_h pf2 = (connection_profile_h)d2;
 
-       TapiHandle *tapi_handle = tel_init(NULL);
-       if (tapi_handle) {
-               SETTING_TRACE_DEBUG("tel_init sucessfull");
-               //1.tel_select_network_automatic
-               int tapi_ret = tel_select_network_automatic(tapi_handle, NULL, NULL);
-               if (tapi_ret != TAPI_API_SUCCESS) {
-                       ret++;
-                       SETTING_TRACE_ERROR("tel_select_network_automatic. tapi_ret=%d", tapi_ret);
-               }
+       if (!pf1) {
+               return (-1);
+       }
+       if (!pf2) {
+               return (1);
+       }
+       char *id_str1 = NULL;
+       char *id_str2 = NULL;
+       connection_profile_get_id(pf1, &id_str1);
+       connection_profile_get_id(pf2, &id_str2);
+
+       char *name1 = NULL;
+       char *name2 = NULL;
+       connection_profile_get_name(pf1, &name1);
+       connection_profile_get_name(pf2, &name2);
+
+       if (isEmptyStr(id_str1)) {
+               FREE(id_str1);
+               FREE(id_str2);
+               return (-1);
+       }
 
-               //2.tel_set_network_mode
-               tapi_ret = tel_set_network_mode(tapi_handle, TAPI_NETWORK_MODE_AUTO,
-                                                NULL, NULL);
-               if (tapi_ret != TAPI_API_SUCCESS) {
-                       ret++;
-                       SETTING_TRACE_ERROR("tel_set_network_mode. tapi_ret=%d", tapi_ret);
+       if (isEmptyStr(id_str2)) {
+               FREE(id_str1);
+               FREE(id_str2);
+               return (1);
+       }
+
+       char str1[MAX_ID_LEN] = {0,};
+       char str2[MAX_ID_LEN] = {0,};
+       safeCopyStr(str1, id_str1, MAX_ID_LEN);
+       safeCopyStr(str2, id_str2, MAX_ID_LEN);
+       G_FREE(id_str1);
+       G_FREE(id_str2);
+       /*SETTING_TRACE("str1:%s, name1:%s", str1, name1); */
+       /*SETTING_TRACE("str2:%s, name2:%s", str2, name2); */
+
+       char *p = NULL;
+       /*for id1.. */
+       p = safeStrRStr(str1, "_");
+       if (!p) {
+               return (-1);
+       }
+       *p = '\0';
+       p = safeStrRStr(str1, "_");
+       if (!p) {
+               return (-1);
+       }
+       p++;
+       int id1 = atoi(p);
+       /*SETTING_TRACE("id1:%d", id1); */
+
+       /*for id2.. */
+       p = safeStrRStr(str2, "_");
+       if (!p) {
+               return (1);
+       }
+       *p = '\0';
+       p = safeStrRStr(str2, "_");
+       if (!p) {
+               return (1);
+       }
+       p++;
+       int id2 = atoi(p);
+
+       /*SETTING_TRACE("id2:%d", id2); */
+       return id1 - id2;
+}
+
+void setting_network_reget_profile_list(void *cb)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(cb == NULL);
+       SettingNetworkUG *ad = (SettingNetworkUG *) cb;
+       if (ad->profile_list != NULL) {
+               eina_list_free(ad->profile_list);
+               ad->profile_list = NULL;
+       }
+       connection_profile_iterator_h profile_iter = NULL;
+       connection_profile_h profile_h = NULL;
+       int rv = connection_get_profile_iterator(ad->connection, CONNECTION_ITERATOR_TYPE_REGISTERED, &profile_iter);
+       if (rv != CONNECTION_ERROR_NONE) {
+               SETTING_TRACE_ERROR("Fail to get profile iterator [%d]", rv);
+               /*elm_object_disabled_set(del_btn, EINA_TRUE); */
+               return;
+       }
+
+       int cnt = 0;
+       connection_profile_type_e profile_type = CONNECTION_PROFILE_TYPE_CELLULAR;
+       connection_cellular_service_type_e service_type = CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
+
+       while (connection_profile_iterator_has_next(profile_iter)) {
+               if (cnt >= MAX_PROFILE_NUM) {
+                       break;
+               }
+               if (connection_profile_iterator_next(profile_iter, &profile_h) != CONNECTION_ERROR_NONE) {
+                       SETTING_TRACE_ERROR("Fail to get profile handle");
+                       break;
                }
 
-               //3.don't need to receive
-               if (tel_deinit(tapi_handle) == TAPI_API_SUCCESS) {
-                       SETTING_TRACE_DEBUG("tel_deinit sucessfull");
+               if (connection_profile_get_type(profile_h, &profile_type) != CONNECTION_ERROR_NONE) {
+                       SETTING_TRACE_ERROR("Fail to get profile type");
+                       continue;
+               }
+               if (connection_profile_get_cellular_service_type(profile_h, &service_type) != CONNECTION_ERROR_NONE) {
+                       SETTING_TRACE_ERROR("Fail to get service type");
+                       continue;
                }
 
+               cnt++;
+               if (CONNECTION_PROFILE_TYPE_CELLULAR != profile_type || ad->profile_service_type != service_type) {
+                       continue;
+               }
+               ad->profile_list = eina_list_sorted_insert(ad->profile_list, __profile_item_sort_cb, profile_h);
+               /*if (cnt > 1) break;//for test */
        }
-
-       //Reset connections info..
-       //  -> need to cowwork with CSC
-       //ret += excuteCmd("/usr/bin/dbus-send", 1, NET_CON_RESET_DBUS_PARA);
        SETTING_TRACE_END;
+}
+
+int is_lte_on_feature(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(!data, 0);
+
+       int ret = 0;
+       vconf_get_int(VCONF_KEY_PRIVATE_LTE_ON, &ret);
+       SETTING_TRACE("LTE feature status: %d", ret);
        return ret;
 }
+
+static Setting_Cfg_Node_T s_cfg_node_array[] = {
+       {"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},
+       {"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},
+       {"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},
+       {"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},
+       {"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},
+};
+
+UG_MODULE_API int setting_plugin_search_init(app_control_h service, void *priv, char **applocale)
+{
+       SETTING_TRACE_BEGIN;
+       SETTING_TRACE(">> setting-network-efl DB search code");
+
+       *applocale = strdup("setting:/usr/apps/org.tizen.setting/res/locale");
+
+       Eina_List **pplist = (Eina_List **)priv;
+       int i;
+       int size = sizeof(s_cfg_node_array) / sizeof(s_cfg_node_array[0]);
+       for (i = 0; i < size; i++) {
+               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");
+               *pplist = eina_list_append(*pplist, node);
+       }
+       return 0;
+}
+