tizen 2.3 release
[apps/home/settings.git] / setting-network / src / setting-network-select-network.c
old mode 100755 (executable)
new mode 100644 (file)
index 98a7dba..78991c6
@@ -1,18 +1,22 @@
 /*
  * setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *
- * Licensed under the Flora License, Version 1.1 (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-select-network.h>
 
@@ -33,6 +37,112 @@ setting_view setting_view_network_select_network = {
  *basic func
  *
  ***************************************************/
+static void
+__network_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!data || !event_info);
+       SettingNetworkUG *ad = (SettingNetworkUG *) data;
+       Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info;
+       Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlist_sel_network, ev->output.x, ev->output.y, NULL);
+       ret_if(!selected_item);
+       Setting_GenGroupItem_Data *data_Item = elm_object_item_data_get(selected_item);
+       ret_if(!data_Item);
+       if (!safeStrCmp(data_Item->keyStr, "IDS_COM_BODY_SELECT_AUTOMATICALLY"))
+       {
+               SETTING_TRACE("ev->output.x:%d, ev->output.y:%d", ev->output.x, ev->output.y);
+               Evas_Coord x, y, w, h;
+               evas_object_geometry_get(ad->data_auto_network_item->eo_check, &x, &y, &w, &h);
+               SETTING_TRACE("x:%d, y:%d, w:%d, h:%d", x, y, w ,h);
+               if (x <= ev->output.x && ev->output.x <= (x + w) && y <= ev->output.y && ev->output.y <= (y + h))
+               {
+                       return;
+               }
+               if (ad->data_auto_network_item->chk_status)
+               {
+                       char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, BLUE_COLOR, NULL);
+                       FREE(ad->data_auto_network_item->sub_desc);
+                       ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
+                       FREE(sub_text);
+               }
+               else
+               {
+                       char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, GRAY_COLOR, NULL);
+                       FREE(ad->data_auto_network_item->sub_desc);
+                       ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
+                       FREE(sub_text);
+               }
+
+               elm_genlist_item_fields_update(ad->data_auto_network_item->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
+       }
+}
+static void
+__network_main_gl_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!data || !event_info);
+       SettingNetworkUG *ad = (SettingNetworkUG *) data;
+       Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down*)event_info;
+       ad->point_down.x = ev->output.x;
+       ad->point_down.y = ev->output.y;
+       Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlist_sel_network, ev->output.x, ev->output.y, NULL);
+       ret_if(!selected_item);
+       Setting_GenGroupItem_Data *data_Item = elm_object_item_data_get(selected_item);
+       ret_if(!data_Item);
+       if (!safeStrCmp(data_Item->keyStr, "IDS_COM_BODY_SELECT_AUTOMATICALLY"))
+       {
+               SETTING_TRACE("ev->output.x:%d, ev->output.y:%d", ev->output.x, ev->output.y);
+               Evas_Coord x, y, w, h;
+               evas_object_geometry_get(ad->data_auto_network_item->eo_check, &x, &y, &w, &h);
+               SETTING_TRACE("x:%d, y:%d, w:%d, h:%d", x, y, w ,h);
+               if (x <= ev->output.x && ev->output.x <= (x + w) && y <= ev->output.y && ev->output.y <= (y + h))
+               {
+                       return;
+               }
+
+               char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, WHITE_COLOR, NULL);
+               FREE(ad->data_auto_network_item->sub_desc);
+               ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
+               FREE(sub_text);
+               elm_genlist_item_fields_update(ad->data_auto_network_item->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
+       }
+
+}
+static void
+__network_main_gl_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       //SETTING_TRACE_BEGIN;
+       ret_if(!data || !event_info);
+       SettingNetworkUG *ad = (SettingNetworkUG *) data;
+       Evas_Event_Mouse_Move*ev = (Evas_Event_Mouse_Move*)event_info;
+       int x_offset = ev->cur.output.x - ad->point_down.x;
+       int y_offset = ev->cur.output.y - ad->point_down.y;
+       if(x_offset < 0) x_offset = -x_offset;
+       if(y_offset < 0) y_offset = -y_offset;
+       //SETTING_TRACE("x_offset:%d, y_offset:%d", x_offset, y_offset);
+       if (x_offset <= MIN_MOVE_DISTANCE && y_offset <= MIN_MOVE_DISTANCE)
+       {
+               return;
+       }
+
+       //SETTING_TRACE("xxxxxxxxxx");
+       if (ad->data_auto_network_item->chk_status)
+       {
+               char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, BLUE_COLOR, NULL);
+               FREE(ad->data_auto_network_item->sub_desc);
+               ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
+               FREE(sub_text);
+       }
+       else
+       {
+               char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, GRAY_COLOR, NULL);
+               FREE(ad->data_auto_network_item->sub_desc);
+               ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
+               FREE(sub_text);
+       }
+
+       elm_genlist_item_fields_update(ad->data_auto_network_item->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
+}
 
 static int setting_network_select_network_create(void *cb)
 {
@@ -40,16 +150,22 @@ static int setting_network_select_network_create(void *cb)
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        SettingNetworkUG *ad = (SettingNetworkUG *) cb;
-       ad->net_restore = NET_RESTORE_NONE;
-
-       setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
-                                            _("IDS_ST_BODY_SELECT_NETWORK"),
-                                            _("IDS_COM_BODY_BACK"),
-                                            NULL,
-                                            setting_network_select_network_click_softkey_cancel_cb,
-                                            NULL,
-                                            ad, &ad->genlist_sel_network, ad->navi_bar);
-
+       if (ad->view_to_load == &setting_view_network_select_network) {
+               ad->ly_main = setting_create_layout_navi_bar_genlist(ad->win_main_layout,
+                                                        ad->win_get,
+                                                        "IDS_COM_BODY_NETWORK_OPERATORS",                                                       
+                                                        _("IDS_COM_BODY_BACK"), NULL,
+                                                        setting_network_select_network_click_softkey_cancel_cb, NULL,
+                                                        ad, &ad->genlist_sel_network, &ad->navi_bar);
+       } else {
+               setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
+                                                        "IDS_COM_BODY_NETWORK_OPERATORS",
+                                                        _("IDS_COM_BODY_BACK"),
+                                                        NULL,
+                                                        setting_network_select_network_click_softkey_cancel_cb,
+                                                        NULL,
+                                                        ad, &ad->genlist_sel_network, ad->navi_bar);
+       }
        Elm_Object_Item *item = elm_genlist_item_append(ad->genlist_sel_network,
                                    &(itc_seperator), NULL, NULL,
                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
@@ -68,18 +184,25 @@ static int setting_network_select_network_create(void *cb)
        //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)) {
+       if (!ad->sel_network) {
            ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK)+1);
        }
 
+       elm_genlist_mode_set(ad->genlist_sel_network, ELM_LIST_COMPRESS);       /* resolve abnormal height issue */
+
+       evas_object_event_callback_add(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_UP, __network_main_gl_mouse_up, ad);
+       evas_object_event_callback_add(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_DOWN, __network_main_gl_mouse_down, ad);
+       evas_object_event_callback_add(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_MOVE, __network_main_gl_mouse_move, ad);
+
        if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net) {
                ad->data_auto_network_item = setting_create_Gendial_field_1radio(
                                            ad->genlist_sel_network,
-                                           &(itc_2text_1icon_7),
+                                           //&(itc_2text_1icon_7),
+                                               &(itc_1text_1icon),
                                            setting_network_Gendial_select_plmn_cb,
                                            ad, SWALLOW_Type_1TOGGLE,
                                            NULL, TRUE,
-                                           "IDS_COM_BODY_AUTOMATIC",
+                                           "IDS_COM_BODY_SELECT_AUTOMATICALLY",
                                            setting_network_select_network_chk_changed);
                setting_retvm_if(NULL == ad->data_auto_network_item,
                                 SETTING_RETURN_FAIL, "Failed to calloc memory");
@@ -87,34 +210,13 @@ static int setting_network_select_network_create(void *cb)
                ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
                FREE(sub_text);
                ad->data_auto_network_item->userdata = ad;
+               //setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_TOP);
 
        } else if(TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net) {
-               int tapi_ret;
-
-               //new PDP concept:
-               //when user select network manully, it should disable 3g service, or it will no network to be found.
-               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
-               }
 
-               //searching list
+               /* searching list
+               int tapi_ret;
+               
                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);
@@ -123,35 +225,74 @@ static int setting_network_select_network_create(void *cb)
                        goto err_handle;
                }
                ad->b_searching_network = TRUE;
+               */
 
                ad->data_auto_network_item  = setting_create_Gendial_field_1radio(
                                            ad->genlist_sel_network,
-                                           &(itc_2text_1icon_7),
+                                           //&(itc_2text_1icon_7),
+                                               &(itc_1text_1icon),
                                            setting_network_Gendial_select_plmn_cb,
                                            ad, SWALLOW_Type_1TOGGLE,
-                                           NULL, FALSE, "IDS_COM_BODY_AUTOMATIC",
+                                           NULL, FALSE, "IDS_COM_BODY_SELECT_AUTOMATICALLY",
                                            setting_network_select_network_chk_changed);
 
-               setting_retvm_if(NULL == ad->data_auto_network_item,
-                                SETTING_RETURN_FAIL, "Failed to calloc memory");
+               setting_retvm_if(NULL == ad->data_auto_network_item, SETTING_RETURN_FAIL, "Failed to calloc memory");
                //ad->data_auto_network_item->sub_desc = (char *)g_strdup(ad->sel_network);//just a simple display
                char *sub_text = setting_customize_text(_(ad->sel_network), 0, GRAY_COLOR, NULL);
                ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
+               setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_TOP);
                FREE(sub_text);
                ad->data_auto_network_item->userdata = ad;
-               if (0 != safeStrCmp("IDS_ST_BODY_NOSERVICE", ad->sel_network)
-                   && 0 != safeStrCmp("EMERGENCY", ad->sel_network))
+
+               setting_view_network_select_network.is_create = TRUE;
+
+               setting_network_searching_network( ad->data_auto_network_item );
+
+               /* Searching icon appeared.
+               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);
+               */
+
+               /*
+               if (0 == safeStrCmp("IDS_ST_BODY_NOSERVICE", ad->sel_network)
+                   || 0 == safeStrCmp(_("IDS_ST_BODY_NOSERVICE"), _(ad->sel_network))
+                   || 0 == safeStrCmp("EMERGENCY", ad->sel_network)
+                   || 0 == safeStrCmp(_("EMERGENCY"), ad->sel_network)
+                   || 0 == safeStrCmp("No service", ad->sel_network)
+                   || 0 == safeStrCmp("No service", _(ad->sel_network))
+                   || 0 == safeStrCmp(_("IDS_CALL_POP_CALLING_EMERG_ONLY"), _(ad->sel_network))
+                   || 0 == safeStrCmp("Emergency calls only", _(ad->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);
+               }
+               else
                {
                        //normal case:
                        Setting_GenGroupItem_Data *item_Data = NULL;
 
                        char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
-                       snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN, "%s (%s)",
-                                _(ad->sel_network),setting_network_get_act_str(ad->sel_act));
 
+                       snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN, "%s",_(ad->sel_network));
                        item_Data = setting_create_Gendial_field_1radio(
                                                        ad->genlist_sel_network,
-                                                       &itc_1text_2icon_2,
+                                                       &itc_multiline_1text_1icon,
                                                        setting_network_Gendial_select_plmn_cb, ad,
                                                        SWALLOW_Type_1RADIO,
                                                        ad->chk_sel, TAPI_NETWORK_SELECTIONMODE_MANUAL,
@@ -159,36 +300,31 @@ static int setting_network_select_network_create(void *cb)
                                                        setting_network_select_network_chk_changed);
                        setting_retvm_if(NULL == item_Data, SETTING_RETURN_FAIL, "Failed to calloc memory");
                        item_Data->userdata = ad;
+                       setting_genlist_item_groupstyle_set(item_Data, SETTING_GROUP_STYLE_CENTER);
 
                        ad->data_search_network_item = setting_create_Gendial_field_1radio(
                                                        ad->genlist_sel_network,
-                                                       &itc_1text_2icon_2,
+                                                       &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);
                        elm_radio_value_set(ad->chk_sel, TAPI_NETWORK_SELECTIONMODE_MANUAL);
 
                }
-               else
-               {
-                       //no service case:
-                       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);
-
-               }
+               */
        }
+       //ADD_GL_SEPARATOR(ad->genlist_sel_network);
 
        setting_view_network_select_network.is_create = TRUE;
        return SETTING_RETURN_SUCCESS;
-
+/*
 err_handle:
        setting_view_network_select_network.is_create = TRUE;
        return SETTING_RETURN_FAIL;
+*/
 }
 
 static int setting_network_select_network_destroy(void *cb)
@@ -198,23 +334,20 @@ static int setting_network_select_network_destroy(void *cb)
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        SettingNetworkUG *ad = (SettingNetworkUG *) cb;
-       int err;
-       switch (ad->net_restore) {
-       case NET_RESTORE_PDP:
-               //restore the pdp vconf to be true
-               setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, TRUE, &err);
-               break;
-       case NET_RESTORE_PDP_ROAM:
-               //restore the pdp and roaming vconfs to be true
-               setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, TRUE, &err);
-               setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, TRUE, &err);
-               break;
-       case NET_RESTORE_NONE:
-       default:
-               SETTING_TRACE("Do need restore any vconf");
-               break;
+
+       evas_object_event_callback_del(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_UP, __network_main_gl_mouse_up);
+       evas_object_event_callback_del(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_DOWN, __network_main_gl_mouse_down);
+       evas_object_event_callback_del(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_MOVE, __network_main_gl_mouse_move);
+
+       if (ad->timer) {
+               ecore_timer_del(ad->timer);
+               ad->timer = NULL;
+       }
+
+       if (ad->popup) {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
        }
-       ad->net_restore = NET_RESTORE_NONE;//reset the value
 
        //cancel the searching operation
        if (ad->b_searching_network) {
@@ -236,9 +369,8 @@ static int setting_network_select_network_destroy(void *cb)
        }
 
        FREE(ad->sel_network);
-       //ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
        ad->sel_network = get_pa_select_network();
-       if (isEmptyStr(ad->sel_network)) {
+       if (!ad->sel_network) {
            ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK)+1);
        }
 
@@ -247,7 +379,15 @@ static int setting_network_select_network_destroy(void *cb)
        ad->b_set_auto_network = FALSE;
        setting_network_update_sel_network(ad);
 
-       elm_naviframe_item_pop(ad->navi_bar);
+       if (ad->view_to_load == &setting_view_network_select_network) {
+               if (ad->ly_main) {
+                       evas_object_del(ad->ly_main);
+                       ad->ly_main = NULL;
+               }
+       } else {
+               elm_naviframe_item_pop(ad->navi_bar);
+       }
+       // elm_naviframe_item_pop(ad->navi_bar);
 
        //Following handlers will be used by async listening callback. They must be reset after genlist is 'popuped'.
        ad->data_auto_network_item = NULL;
@@ -293,13 +433,27 @@ setting_network_select_network_click_softkey_cancel_cb(void *data,
                                                       Evas_Object *obj,
                                                       void *event_info)
 {
-       /* error check */
-       retm_if(data == NULL,
-               "[Setting > Network > Select] Data parameter is NULL");
-
+       SETTING_TRACE_BEGIN;
        SettingNetworkUG *ad = (SettingNetworkUG *) data;
 
-       setting_view_change(&setting_view_network_select_network,
+       // If registering.. popup is displaying, Back must be ignored.
+       if ( ad->network_select_registering_pop )
+       {
+               SETTING_TRACE("registering... popup is displaying. back key ignored");
+               return;
+       }
+
+       /* error check */
+       retm_if(data == NULL, "[Setting > Network > Select] Data parameter is NULL");
+
+       if (ad->view_to_load == &setting_view_network_select_network) {
+               // exit
+               ug_destroy_me(ad->ug);
+               return;
+       } else {
+               setting_view_change(&setting_view_network_select_network,
                            &setting_view_network_main, ad);
+       }
+       return;
 }