update license verison number 1.0 -> 1.1
[apps/core/preloaded/settings.git] / setting-network / src / setting-network-main.c
old mode 100644 (file)
new mode 100755 (executable)
index 8e28727..e7e604a
@@ -1,22 +1,25 @@
 /*
-  * Copyright 2012  Samsung Electronics Co., Ltd
-  *
-  * Licensed under the Flora License, Version 1.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://www.tizenopensource.org/license
-  *
-  * Unless required by applicable law or agreed to in writing, software
-  * 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.
-  */
-
-
+ * setting
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.1 (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/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * 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-main.h>
 
+#define MOBILE_DATA_WITHOUT_WIFI_STR                   "IDS_ST_BODY_MOBILE_DATA_WILL_BE_USED_IF_YOU_DOWNLOAD_OR_UPLOAD_DATA_WITHOUT_WI_FI_CONNECTION"
+#define UMTS_MODE_WORK_OUTSIDE_STR                                     "IDS_ST_BODY_UMTS_MODE_ONLY_WORKS_INSIDE_3G_COVERAGE_AREA"
+#define BAND_OPERATE_OUTSIDE_USA_CANADA_STR            "IDS_ST_BODY_THIS_BAND_MAY_NOT_WORK_OUTSIDE_THE_USA_AND_CANADA"
+
 static int setting_network_main_create(void *cb);
 static int setting_network_main_destroy(void *cb);
 static int setting_network_main_update(void *cb);
@@ -42,55 +45,15 @@ static void setting_network_main_chk_btn_cb(void *data, Evas_Object *obj,
                                            void *event_info);
 static void setting_network_use_packet_resp_cb(void *data, Evas_Object *obj,
                                               void *event_info);
+static void __setting_network_data_roaming_resp_cb(void *data, Evas_Object *obj,
+                                            void *event_info);
+
 
 /* ***************************************************
  *
  *basic func
  *
  ***************************************************/
-static void __ask_create_gsm_resp_cb(void *data, Evas_Object *obj,
-                                          void *event_info)
-{
-       SETTING_TRACE_BEGIN;
-       
-       SettingNetworkUG *ad = (SettingNetworkUG *) data;
-       ret_if(NULL == data);
-       int response_type = btn_type(obj);
-       bool rollback_flag = FALSE;
-       if (POPUP_RESPONSE_OK == response_type) {
-               int tapi_ret = TAPI_API_INVALID_INPUT;
-               int request_id;
-               
-               //async: TAPI_EVENT_NETWORK_SETNWBAND_CNF
-               tapi_ret =
-                   tel_set_network_band(TAPI_NETWORK_BAND_MODE_ONLY,
-                                        TAPI_NETWORK_BAND_TYPE_GSM_850_1900,
-                                        &request_id);
-               if (tapi_ret != TAPI_API_SUCCESS) {
-                       SETTING_TRACE_DEBUG
-                           ("%s*** [ERR] tel_set_network_band. tapi_ret=%d ***%s",
-                            SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-                       rollback_flag = TRUE;
-
-               }
-
-       } else if (POPUP_RESPONSE_CANCEL == response_type) {
-               rollback_flag = TRUE;
-       }
-       if (rollback_flag)
-       {
-               //rollback
-               int err;
-               int value = TAPI_NETWORK_BAND_TYPE_ANY;
-               setting_get_int_slp_key(ad->data_net_mode->int_slp_setting_binded,
-                                       &(value), &err);
-               /** @todo check 'err' variable for exception handling */
-               elm_radio_value_set(ad->data_net_mode->rgd, value);
-       }
-       evas_object_del(ad->pop_gsm);
-       ad->pop_gsm = NULL;
-
-}
 void __network_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
@@ -101,64 +64,34 @@ void __network_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
        Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
        elm_genlist_item_selected_set(subitem, 0);
        Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
+       SETTING_TRACE("data_subItem->chk_status:%d", data_subItem->chk_status);
+       SETTING_TRACE("elm_radio_value_get(ad->data_net_mode->rgd):%d", elm_radio_value_get(ad->data_net_mode->rgd));
        if (data_subItem->chk_status == elm_radio_value_get(ad->data_net_mode->rgd))
        {
                return;
        }
        elm_radio_value_set(ad->data_net_mode->rgd, data_subItem->chk_status);
 
-       int tapi_ret = TAPI_API_INVALID_INPUT;
-       int request_id = 0;
-       TelNetworkBand_t band = TAPI_NETWORK_BAND_TYPE_ANY;
-
-       switch (data_subItem->chk_status) {
-
-       case TAPI_NETWORK_BAND_TYPE_ANY:
-               band = TAPI_NETWORK_BAND_TYPE_ANY;
-               break;
-
-       case TAPI_NETWORK_BAND_TYPE_GSM_900_1800:
-               band = TAPI_NETWORK_BAND_TYPE_GSM_900_1800;
-               break;
-
-       case TAPI_NETWORK_BAND_TYPE_GSM_850_1900:
-               ad->pop_gsm = setting_create_popup_with_btn(ad,
-                                                 ad->win_get,
-                                                 _("This band may not operate<br>outside the USA or Canada"),
-                                                 NULL,
-                                                 __ask_create_gsm_resp_cb,
-                                                 0, 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
-               return;
-
-       case TAPI_NETWORK_BAND_TYPE_WCDMA:
-               setting_network_popup_create(ad,
-                                            _("UTMS mode works inside <br>3G coverage area only"),
-                                            FALSE);
-               band = TAPI_NETWORK_BAND_TYPE_WCDMA;
-               break;
-       default:
-               SETTING_TRACE("Unknown Tel-Net band type");
-               break;
-       }
-
-       //async: TAPI_EVENT_NETWORK_SETNWBAND_CNF
-       tapi_ret =
-           tel_set_network_band(TAPI_NETWORK_BAND_MODE_ONLY, band,
-                                &request_id);
+       ad->net_mode = data_subItem->chk_status;
+       int tapi_ret = tel_set_network_mode(ad->handle, data_subItem->chk_status, setting_tapi_set_band_cb, ad);
        if (tapi_ret != TAPI_API_SUCCESS) {
                SETTING_TRACE_DEBUG
-                   ("%s*** [ERR] tel_set_network_band. tapi_ret=%d ***%s",
+                   ("%s*** [ERR] tel_set_network_mode. tapi_ret=%d ***%s",
                     SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-
+               setting_create_popup_without_btn(ad, ad->win_get, NULL, _(Invok_API_Failed_Desc), NULL, POPUP_INTERVAL, FALSE, FALSE);
                //rollback
                int err;
-               int value = TAPI_NETWORK_BAND_TYPE_ANY;
                setting_get_int_slp_key(ad->data_net_mode->int_slp_setting_binded,
-                                       &(value), &err);
+                                       &(ad->net_mode), &err);
                /** @todo check 'err' variable for exception handling */
-               elm_radio_value_set(ad->data_net_mode->rgd, value);
+               elm_radio_value_set(ad->data_net_mode->rgd, ad->net_mode);
                return;
        }
+
+       //it will be deleted in callback set by tel_set_network_mode(that is setting_tapi_set_band_cb.)
+       ad->network_ug_pop = setting_create_popup_without_btn(ad, ad->win_get, NULL,
+                                        _("IDS_COM_POP_PROCESSING"), NULL,
+                                        0.0, TRUE, TRUE);
 }
 
 
@@ -178,36 +111,28 @@ __setting_network_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
                elm_radio_value_set(rgd, -1);
 
                setting_create_Gendial_exp_sub_field(scroller,
-                                                    &(ad->itc_1icon_1text_sub),
-                                                    __network_sub_list_sel_cb, 
-                                                    ad, parentItem,
-                                                    SWALLOW_Type_1RADIO, rgd,
-                                                    TAPI_NETWORK_BAND_TYPE_ANY,
-                                                    "IDS_COM_BODY_AUTOMATIC", NULL);
-
-               setting_create_Gendial_exp_sub_field(scroller,
-                                                    &(ad->itc_1icon_1text_sub),
-                                                    __network_sub_list_sel_cb, 
+                                                    &itc_1icon_1text_sub,
+                                                    __network_sub_list_sel_cb,
                                                     ad, parentItem,
                                                     SWALLOW_Type_1RADIO, rgd,
-                                                    TAPI_NETWORK_BAND_TYPE_GSM_900_1800,
-                                                    STR_SETTING_GSM_900_1800, NULL);
+                                                    TAPI_NETWORK_MODE_AUTO,
+                                                    Keystr_NetBrand_Auto, NULL);
 
                setting_create_Gendial_exp_sub_field(scroller,
-                                                    &(ad->itc_1icon_1text_sub),
-                                                    __network_sub_list_sel_cb, 
+                                                    &itc_1icon_1text_sub,
+                                                    __network_sub_list_sel_cb,
                                                     ad, parentItem,
                                                     SWALLOW_Type_1RADIO, rgd,
-                                                    TAPI_NETWORK_BAND_TYPE_GSM_850_1900,
-                                                    STR_SETTING_GSM_850_1900, NULL);
+                                                    TAPI_NETWORK_MODE_GSM,
+                                                    Keystr_NetBrand_GSM, NULL);
 
                setting_create_Gendial_exp_sub_field(scroller,
-                                                    &(ad->itc_1icon_1text_sub),
-                                                    __network_sub_list_sel_cb, 
+                                                    &itc_1icon_1text_sub,
+                                                    __network_sub_list_sel_cb,
                                                     ad, parentItem,
                                                     SWALLOW_Type_1RADIO, rgd,
-                                                    TAPI_NETWORK_BAND_TYPE_WCDMA,
-                                                    STR_SETTING_UMTS, NULL);
+                                                    TAPI_NETWORK_MODE_WCDMA,
+                                                    Keystr_NetBrand_WCDMA, NULL);
 
                data_parentItem->rgd = rgd;
                setting_update_chk_status(rgd, data_parentItem->int_slp_setting_binded);
@@ -215,42 +140,98 @@ __setting_network_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
        }
 }
 
+#define __switch_radio_state(cur_data, dst_state, dst_key) do { \
+       if (cur_data)\
+       {\
+               old_status = cur_data->chk_status;\
+               cur_data->chk_status = dst_state;\
+               elm_radio_state_value_set(cur_data->eo_check, cur_data->chk_status);\
+               if (sel_mode == old_status)\
+               {\
+                       sel_item_data = cur_data;\
+               }\
+               \
+               G_FREE(cur_data->keyStr);\
+               cur_data->keyStr = g_strdup(dst_key);\
+               elm_genlist_item_fields_update(cur_data->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);\
+       }\
+} while (0);
+
+static void __3g_change_cb(keynode_t *key, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(NULL == data);
+       SettingNetworkUG *ad = data;
+       int status = vconf_keynode_get_bool(key);
+       char *vconf_name = vconf_keynode_get_name(key);
+       SETTING_TRACE("vconf_name:%s, status:%d", vconf_name, status);
+
+       if (!safeStrCmp(vconf_name, VCONFKEY_3G_ENABLE)) {
+               if(ad->data_use_packet)
+               {
+                       ad->data_use_packet->chk_status = status;
+                       elm_check_state_set(ad->data_use_packet->eo_check, ad->data_use_packet->chk_status);
+               }
+       }
+}
+static void __data_roaming_change_cb(keynode_t *key, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(NULL == data);
+       SettingNetworkUG *ad = data;
+       int status = vconf_keynode_get_bool(key);
+       char *vconf_name = vconf_keynode_get_name(key);
+       SETTING_TRACE("vconf_name:%s, status:%d", vconf_name, status);
+
+       if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_STATE_DATA_ROAMING_BOOL) && ad->data_roaming) {
+               ad->data_roaming->chk_status = status;
+               elm_check_state_set(ad->data_roaming->eo_check, ad->data_roaming->chk_status);
+               if (status)
+               {
+                       int value = 0;
+                       int err = 0;
+                       setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &value, &err);
+                       setting_retm_if(err != 0, "get vconf failed");
+                       if (!value) {
+                               setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
+                                                        SETTING_ON_OFF_BTN_ON, &err);
+                       }
+               }
+       }
+}
 
-#define Data_packet_Desc _("IDS_ST_BODY_MOBILE_DATA_WILL_BE_USED_IF_YOU_DOWNLOAD_OR_UPLOAD_DATA_WITHOUT_WI_FI_CONNECTION")
 static int setting_network_main_create(void *cb)
 {
        SETTING_TRACE_BEGIN;
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        SettingNetworkUG *ad = (SettingNetworkUG *) cb;
-
+       /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
        int value = 0;
        int k = -1;
+       /*  ****END****  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
 
        Evas_Object *scroller;
 
-       int tapi_ret;
-       int request_id = 0;
-
        ad->ly_main =
            setting_create_layout_navi_bar_genlist(ad->win_main_layout,
                                                   ad->win_get,
                                                   _("IDS_ST_BODY_NETWORK"),
                                                   dgettext("sys_string",
                                                            "IDS_COM_BODY_BACK"),
-                                                  dgettext("sys_string",
-                                                           "IDS_COM_BODY_HELP"),
+                                                  NULL,//_("IDS_COM_BODY_HELP"),
                                                   setting_network_main_click_softkey_back_cb,
                                                   setting_network_main_click_softkey_help_cb,
                                                   ad, &scroller,
                                                   &ad->navi_bar);
-       
+
        setting_enable_expandable_genlist(scroller, ad,
                                          __setting_network_main_exp_cb, NULL);
+
        Elm_Object_Item *item = NULL;;
 
        item =
-           elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
+           elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
        elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
 
@@ -259,104 +240,123 @@ static int setting_network_main_create(void *cb)
        setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
                                 &value_use_packet, &err_use_packet);
        /** @todo check 'err_use_packet' variable for exception handling */
-       // Under emulator environment, it fails to control data network connections
-       if (!isEmulBin()) {
-               ad->data_use_packet =
-                   setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
+       ad->data_use_packet =
+           setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
                                             setting_network_main_item_Gendial_mouse_up_cb,
                                             ad, SWALLOW_Type_1TOGGLE, NULL,
                                             NULL, value_use_packet,
                                             KeyStr_UsePacketData, NULL,
                                             setting_network_main_chk_btn_cb);
-               if (ad->data_use_packet) {
-                       ad->data_use_packet->userdata = ad;
-               } else {
-                       SETTING_TRACE_ERROR("ad->data_use_packet is NULL");
-               }
+       if (ad->data_use_packet) {
+               ad->data_use_packet->userdata = ad;
+       } else {
+               SETTING_TRACE_ERROR("ad->data_use_packet is NULL");
+       }
 
-               setting_create_Gendial_field_def(scroller, &(ad->itc_bg_1icon), NULL,
-                                        ad, SWALLOW_Type_LAYOUT_SPECIALIZTION,
+       setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
+                                        ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
                                         NULL, NULL, 0, Data_packet_Desc, NULL,
                                         NULL);
+       elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
+                                        ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       /* data roaming */
+       int value_data_roaming = 0;
+       int err_data_roaming = 0;
+       setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
+                                &value_data_roaming, &err_data_roaming);
+       if (err_data_roaming != 0) {
+               SETTING_TRACE_ERROR("get vconf failed");
        }
-
-       char *sub_des = NULL;
-       /*  NO flight mode - default */
-       tapi_ret = tel_get_network_selection_mode(&request_id);
-       if (tapi_ret != TAPI_API_SUCCESS) {
-               SETTING_TRACE
-                       ("%s*** [ERR] tel_get_network_selection_mode. tapi_ret=%d ***%s",
-                        SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-               sub_des = _("IDS_COM_BODY_AUTOMATIC");
+       ad->data_roaming = setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
+                                                           setting_network_main_item_Gendial_mouse_up_cb,
+                                                           ad, SWALLOW_Type_1TOGGLE, NULL,
+                                                           NULL, value_data_roaming,
+                                                           KeyStr_DataRoaming, NULL,
+                                                           setting_network_main_chk_btn_cb);
+       if (ad->data_roaming) {
+               ad->data_roaming->userdata = ad;
+       } else {
+               SETTING_TRACE_ERROR("ad->data_roaming is NULL");
        }
 
-       k = vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &value);
-       if (-1 != k) {
-               switch (value) {
-               case TAPI_NETWORK_SELECTIONMODE_AUTOMATIC:
-                       {
-                               sub_des = _("IDS_COM_BODY_AUTOMATIC");
-                               break;
-                       }
-               case TAPI_NETWORK_SELECTIONMODE_MANUAL:
-                       {
-                               sub_des = _("IDS_COM_BODY_MANUAL");
-                               break;
-                       }
-               default:
-                       {
-                               break;
-                       }
-               }
+       setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
+                                        ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
+                                        NULL, NULL, 0, SETTING_NETWORK_DATA_ROMING_DESC, NULL,
+                                        NULL);
+       elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
+                                        ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+
+       /* (void)setting_create_Gendial_field_titleItem(scroller, &(ad->itc_group_item), speciliztion, NULL); */
+
+       /*  Don't need to check flight mode,if flight mode is on, thw whole Network function will be disable*/
+       /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
+       ad->sel_net = TAPI_NETWORK_SELECTIONMODE_AUTOMATIC;
+       ad->sel_act = TAPI_NETWORK_SYSTEM_NO_SRV;
+       vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net);
+       vconf_get_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 = get_pa_select_network();
+       SETTING_TRACE("pa_sel_net_name:%s", ad->sel_network);
+       if (isEmptyStr(ad->sel_network)) {
+           ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK)+1);
        }
-       ad->sel_net = value;
-       const char *pa_net_name = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
-       SETTING_TRACE("pa_net_name:%s", pa_net_name);
-       if (NULL == pa_net_name) {
-               pa_net_name = "IDS_ST_BODY_NOSERVICE";
-       } 
-       
+       SETTING_TRACE("pa_net_name:%s", ad->sel_network);
+       SETTING_TRACE("old act:%d", ad->sel_act);
+       SETTING_TRACE("old network mode:%d", ad->sel_net);
+
        char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
-       snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN, 
-                "%s. %s", sub_des, _(pa_net_name));
-       FREE(pa_net_name);
+       if (TAPI_NETWORK_SELECTIONMODE_MANUAL == value) {
+               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));
+       }
+       else{
+               snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN,
+                        "%s, %s", _("IDS_COM_BODY_AUTOMATIC"), _(ad->sel_network));
+       }
 
        ad->data_sel_net = setting_create_Gendial_field_def(scroller,
-                                                &(ad->itc_2text_2),
-                                                setting_network_main_item_Gendial_mouse_up_cb,
-                                                ad, SWALLOW_Type_INVALID,
-                                                NULL, NULL, 0,
-                                                "IDS_ST_BODY_SELECT_NETWORK",
-                                                sel_network_desc, NULL);
+                                    &itc_2text_3,
+                                    setting_network_main_item_Gendial_mouse_up_cb,
+                                    ad, SWALLOW_Type_INVALID,
+                                    NULL, NULL, 0,
+                                    "IDS_ST_BODY_SELECT_NETWORK",
+                                    sel_network_desc, NULL);
        if (ad->data_sel_net) {
                ad->data_sel_net->userdata = ad;
        } else {
                SETTING_TRACE_ERROR("ad->data_sel_net is NULL");
        }
-
-       tapi_ret = tel_get_network_band(&request_id);
-       if (tapi_ret != TAPI_API_SUCCESS) {
-               SETTING_TRACE
-                   ("%s*** [ERR] tel_get_network_band. tapi_ret=%d ***%s",
-                    SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-               sub_des = _("IDS_COM_BODY_AUTOMATIC");
-       }
-
+       /*  ***BEGIN***  Fixed the problem of word twinkle  SAMSUNG 2010/7/21 add */
+       /* hide NETWORK MODE in Emulator*/
+       char *sub_des = NULL;
+       value = TAPI_NETWORK_MODE_AUTO;
        k = vconf_get_int(VCONFKEY_SETAPPL_NETWORK_MODE_INT, &value);
        if (-1 != k) {
-               SETTING_TRACE("value:%d", value);
+               SETTING_TRACE("VCONFKEY_SETAPPL_NETWORK_MODE_INT value:%d", value);
                switch (value) {
-               case TAPI_NETWORK_BAND_TYPE_ANY:
-                       sub_des = _("IDS_COM_BODY_AUTOMATIC");
+               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_BAND_TYPE_GSM_900_1800:
-                       sub_des = _(STR_SETTING_GSM_900_1800);
+               }
+
+               case TAPI_NETWORK_MODE_GSM:
+                       sub_des = _(Keystr_NetBrand_GSM);
                        break;
-               case TAPI_NETWORK_BAND_TYPE_GSM_850_1900:
-                       sub_des = _(STR_SETTING_GSM_850_1900);
+               case TAPI_NETWORK_MODE_WCDMA:
+                       sub_des = _(Keystr_NetBrand_WCDMA);
                        break;
-               case TAPI_NETWORK_BAND_TYPE_WCDMA:
-                       sub_des = _(STR_SETTING_UMTS);
+               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;
@@ -365,7 +365,7 @@ static int setting_network_main_create(void *cb)
 
        ad->data_net_mode =
            setting_create_Gendial_exp_parent_field(scroller,
-                                                   &(ad->itc_2text_3_parent),
+                                                   &itc_2text_3_parent,
                                                    NULL, NULL,
                                                    SWALLOW_Type_INVALID,
                                                    "IDS_ST_BODY_NETWORK_MODE",
@@ -378,28 +378,21 @@ static int setting_network_main_create(void *cb)
                SETTING_TRACE_ERROR("ad->data_back is NULL");
        }
 
-       setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
+       setting_create_Gendial_field_def(scroller, &itc_1text,
                                         setting_network_main_item_Gendial_mouse_up_cb,
                                         ad, SWALLOW_Type_INVALID, NULL, NULL,
-                                        0, "IDS_ST_BODY_INTERNET_CONNECTION",
+                                        0, CONNECTION_DSC,
                                         NULL, NULL);
-#ifdef ENABLED_PREFERRED_NETWORKS
-       setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
-                                        setting_network_main_item_Gendial_mouse_up_cb,
-                                        ad, SWALLOW_Type_INVALID, NULL, NULL,
-                                        0, "IDS_ST_BODY_PREFERRED_NETWORKS",
-                                        NULL, NULL);
-#endif
-#ifdef ENABLED_2G3G_NETWORK
-       /*  create 3g connection option */
-       setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
-                                        setting_network_main_item_Gendial_mouse_up_cb,
-                                        ad, SWALLOW_Type_INVALID, NULL, NULL,
-                                        0, "2G/3G Connection", NULL, NULL);
 
-       /* add blank rectangle */
-#endif
+       item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
+                                   ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       vconf_notify_key_changed(VCONFKEY_3G_ENABLE, __3g_change_cb, ad);
+       vconf_notify_key_changed(VCONFKEY_SETAPPL_STATE_DATA_ROAMING_BOOL, __data_roaming_change_cb, ad);
+
        setting_view_network_main.is_create = 1;
+       setting_view_update(&setting_view_network_main, ad);
        return SETTING_RETURN_SUCCESS;
 }
 
@@ -409,10 +402,17 @@ static int setting_network_main_destroy(void *cb)
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        SettingNetworkUG *ad = (SettingNetworkUG *) cb;
+       vconf_ignore_key_changed(VCONFKEY_3G_ENABLE, __3g_change_cb);
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_STATE_DATA_ROAMING_BOOL, __data_roaming_change_cb);
 
        if (ad->ly_main != NULL) {
                evas_object_del(ad->ly_main);
        }
+       if(ad->network_ug_pop)
+       {
+               evas_object_del(ad->network_ug_pop);
+               ad->network_ug_pop = NULL;
+       }
        ad->data_sel_net = NULL;//reset NULL after genlis destoryed with ly_main.
 
        setting_view_network_main.is_create = 0;
@@ -438,6 +438,17 @@ static int setting_network_main_update(void *cb)
 
 static int setting_network_main_cleanup(void *cb)
 {
+       /* error check */
+       /* retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER); */
+
+       /* SettingNetworkUG *ad = (SettingNetworkUG *)cb; */
+
+       /* all the view in view stack shared the ad->ly_main, it cannot be hided!!! */
+       /* if(ad->ly_main != NULL) */
+       /* { */
+       /* evas_object_hide(ad->ly_main); */
+       /* } */
+
        return SETTING_RETURN_SUCCESS;
 }
 
@@ -501,94 +512,47 @@ setting_network_main_item_Gendial_mouse_up_cb(void *data, Evas_Object *obj,
                    setting_view_change(&setting_view_network_main,
                                        &setting_view_network_select_network,
                                        ad);
-       } else
-           if (!safeStrCmp
-               ("IDS_ST_BODY_INTERNET_CONNECTION", list_item->keyStr)) {
-
-               ad->con_type = NET_SERVICE_INTERNET;
-               ret =
-                   setting_view_change(&setting_view_network_main,
-                                       &setting_view_network_connection_create,
-                                       ad);
        }
-#ifdef ENABLED_PREFERRED_NETWORKS      
-       else if (!safeStrCmp("IDS_ST_BODY_PREFERRED_NETWORKS", 
-                               list_item->keyStr)) {
-                               
-               int value = -1;
-               int err = -1;
-               ret =
-                   setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value,
-                                           &err);
-                       /** @todo check 'err' variable for exception handling */
-               SETTING_TRACE("INT_SLP_SETTING_SIM_SLOT value:%d", value);
-               switch (value) {
-               case VCONFKEY_TELEPHONY_SIM_INSERTED:
-                       /* To Recreate the view in order to search the perferred network again. */
-                       /* ret = setting_view_destroy(&setting_view_network_preferred_network, ad); */
-                       ret =
-                           setting_view_change(&setting_view_network_main,
-                                               &setting_view_network_preferred_network,
-                                               ad);
-
-                       break;
-
-               case VCONFKEY_TELEPHONY_SIM_NOT_PRESENT:
-
-                       setting_create_popup_without_title(NULL, ad->win_get,
-                                                         _
-                                                         ("IDS_ST_SECURITY_BODY_NOIMSI"));
-                       SETTING_TRACE_DEBUG
-                           ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
-                            SETTING_FONT_RED, value, SETTING_FONT_BLACK);
-                       return;
-
-                       break;
-
-               case VCONFKEY_TELEPHONY_SIM_CARD_ERROR:
-               case VCONFKEY_TELEPHONY_SIM_UNKNOWN:
-
-                       setting_create_popup_without_title(NULL, ad->win_get,
-                                                         _
-                                                         ("IDS_COM_BODY_INVALID_SIM_CARD"));
-                       SETTING_TRACE_DEBUG
-                           ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
-                            SETTING_FONT_RED, value, SETTING_FONT_BLACK);
-                       return;
-
-                       break;
-               default:
-                       SETTING_TRACE("Unknown SIM information from vconf");
-                       break;
-               }
-       }
-#endif
-#ifdef ENABLED_2G3G_NETWORK
-       else if (!safeStrCmp("2G/3G Connection", list_item->keyStr)) {
-               ret =
-                   setting_view_change(&setting_view_network_main,
-                                       &setting_view_network_3gcon, ad);
-       }
-#endif
        else if (!safeStrCmp(KeyStr_UsePacketData, list_item->keyStr)) {
                int old_status = elm_check_state_get(list_item->eo_check);
                /* new status */
                list_item->chk_status = !old_status;
                elm_check_state_set(list_item->eo_check, list_item->chk_status);
-               int err = 0;
                if (!list_item->chk_status) {
-                       setting_set_bool_slp_key
-                           (BOOL_SLP_SETTING_USE_PACKET_DATA,
-                            SETTING_ON_OFF_BTN_OFF, &err);
-                       /** @todo check 'err' variable for exception handling */
-               } else {
                        ad->popup =
                            setting_create_popup_with_btn(ad, ad->win_get,
-                                                _("Data packet through 3G network will be consumed, if you use data download or upload without Wi-Fi connection.Continue?"),
-                                                NULL,
+                                                NULL, _(SETTING_NETWORK_USE_PACKET_DATA_OFF_DESC),
                                                 setting_network_use_packet_resp_cb,
                                                 0, 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
+               } else {
+                       ad->popup =
+                           setting_create_popup_with_btn(ad, ad->win_get,
+                                                NULL, _(SETTING_NETWORK_USE_PACKET_DATA_ON_DESC),
+                                                setting_network_use_packet_resp_cb,
+                                                0, 1, _("IDS_COM_SK_OK"));
+               }
+
+       } else if (!safeStrCmp(KeyStr_DataRoaming, list_item->keyStr)) {
+               int old_status = elm_check_state_get(list_item->eo_check);
+               /* new status */
+               list_item->chk_status = !old_status;
+               elm_check_state_set(list_item->eo_check, list_item->chk_status);
+
+               char *notify_str = NULL;
+               if (!list_item->chk_status) {
+                       notify_str = SETTING_NETWORK_DATA_ROMING_OFF_DESC;
+                       ad->popup = setting_create_popup_with_btn(ad, ad->win_get,
+                                                         NULL, notify_str,
+                                                         __setting_network_data_roaming_resp_cb, 0,
+                                                         1, _("IDS_COM_SK_OK"));
+               } else {
+                       int err = 0;
+                       setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
+                                                SETTING_ON_OFF_BTN_ON, &err);
                }
+       } else if(!safeStrCmp(CONNECTION_DSC, list_item->keyStr)) {
+               ret = setting_view_change(&setting_view_network_main,
+                                       &setting_view_network_con, ad);
        }
 }
 
@@ -605,22 +569,31 @@ setting_network_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
        list_item->chk_status = elm_check_state_get(obj);       /*  for genlist update status */
 
        if (obj == ad->data_use_packet->eo_check) {
-               int err;
-               /* int value; */
-               if (list_item->chk_status) {
+               if (!list_item->chk_status) {
                        ad->popup =
                            setting_create_popup_with_btn(ad, ad->win_get,
-                                                _("Data packet through 3G network will be consumed, if you use data download or upload without Wi-Fi connection.Continue?"),
-                                                NULL,
+                                                NULL, _(SETTING_NETWORK_USE_PACKET_DATA_OFF_DESC),
                                                 setting_network_use_packet_resp_cb,
                                                 0, 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
                } else {
-                       setting_set_bool_slp_key
-                           (BOOL_SLP_SETTING_USE_PACKET_DATA,
-                            SETTING_ON_OFF_BTN_OFF, &err);
-                       /** @todo check 'err' variable for exception handling */
-                       elm_check_state_set(ad->data_use_packet->eo_check, 0);
-                       ad->data_use_packet->chk_status = 0;
+                       ad->popup =
+                           setting_create_popup_with_btn(ad, ad->win_get,
+                                                NULL, _(SETTING_NETWORK_USE_PACKET_DATA_ON_DESC),
+                                                setting_network_use_packet_resp_cb,
+                                                0, 1, _("IDS_COM_SK_OK"));
+               }
+       }else if (obj == ad->data_roaming->eo_check) {
+               char *notify_str = NULL;
+               if (!list_item->chk_status) {
+                       notify_str = SETTING_NETWORK_DATA_ROMING_OFF_DESC;
+                       ad->popup = setting_create_popup_with_btn(ad, ad->win_get,
+                                                         NULL, notify_str,
+                                                         __setting_network_data_roaming_resp_cb, 0,
+                                                         1, _("IDS_COM_SK_OK"));
+               } else {
+                       int err = 0;
+                       setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
+                                                SETTING_ON_OFF_BTN_ON, &err);
                }
        }
 }
@@ -633,20 +606,61 @@ setting_network_use_packet_resp_cb(void *data, Evas_Object *obj,
        retm_if(data == NULL, "Data parameter is NULL");
 
        SettingNetworkUG *ad = (SettingNetworkUG *) data;
-       int err;                /* error check   */
+       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) {
-               setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
-                                        SETTING_ON_OFF_BTN_ON, &err);
-               /** @todo check 'err' variable for exception handling */
-               elm_check_state_set(ad->data_use_packet->eo_check, 1);
-               ad->data_use_packet->chk_status = 1;
+               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");
+
+                       elm_check_state_set(ad->data_use_packet->eo_check, 1);
+                       ad->data_use_packet->chk_status = 1;
+
+                       /* if called by other apps, destroy ug */
+                       if (!safeStrCmp(ad->view_type_string, "DATA_ROAMING")) {
+                               if (ad->popup) {
+                                       evas_object_del(ad->popup);
+                                       ad->popup = NULL;
+                               }
+                               ug_destroy_me(ad->ug);
+                               return;
+                       }
+               } 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");
+
+                       elm_check_state_set(ad->data_use_packet->eo_check, 0);
+                       ad->data_use_packet->chk_status = 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");
+
+                               elm_check_state_set(ad->data_roaming->eo_check, 0);
+                               ad->data_roaming->chk_status = 0;
+                       }
+               }
        } else if (POPUP_RESPONSE_CANCEL == response_type) {
-               setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
-                                        SETTING_ON_OFF_BTN_OFF, &err);
-               /** @todo check 'err' variable for exception handling */
-               elm_check_state_set(ad->data_use_packet->eo_check, 0);
-               ad->data_use_packet->chk_status = 0;
+               /* rollback */
+               if (value == 1) {
+                       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");
+                       elm_check_state_set(ad->data_use_packet->eo_check, 1);
+                       ad->data_use_packet->chk_status = 1;
+               }
        }
        if (ad->popup)
        {
@@ -655,3 +669,54 @@ setting_network_use_packet_resp_cb(void *data, Evas_Object *obj,
        }
 
 }
+
+static void __setting_network_data_roaming_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 response_type = btn_type(obj);
+       SETTING_TRACE("elm_object_parent_widget_get(obj):%p", elm_object_parent_widget_get(obj));
+       SETTING_TRACE("obj:%p", obj);
+       if (POPUP_RESPONSE_OK == response_type) {
+               int value = 0;
+               int err = 0;
+               setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, &value, &err);
+
+               if (value == 0) {
+                       setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
+                                                SETTING_ON_OFF_BTN_ON, &err);
+                       setting_retm_if(err != 0, "set vconf failed");
+
+                       elm_check_state_set(ad->data_roaming->eo_check, 1);
+                       ad->data_roaming->chk_status = 1;
+
+                       /* if called by other apps, destroy ug */
+                       if (!safeStrCmp(ad->view_type_string, "DATA_ROAMING")) {
+                               if (ad->popup)
+                               {
+                                       evas_object_del(ad->popup);
+                                       ad->popup = NULL;
+                               }
+                               ug_destroy_me(ad->ug);
+                               return;
+                       }
+               } else {
+                       setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING,
+                                                SETTING_ON_OFF_BTN_OFF, &err);
+                       setting_retm_if(err != 0, "set vconf failed");
+
+                       elm_check_state_set(ad->data_roaming->eo_check, 0);
+                       ad->data_roaming->chk_status = 0;
+               }
+       }
+
+       if (ad->popup)
+       {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+}
+