new release for RSA
[apps/core/preloaded/settings.git] / setting-network / src / setting-network-connection-create.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 #include <setting-network-connection-create.h>
22
23 static int setting_network_connection_create(void *cb);
24 static int setting_network_connection_destroy(void *cb);
25 static int setting_network_connection_update(void *cb);
26 static int setting_network_connection_cleanup(void *cb);
27
28 setting_view setting_view_network_connection_create = {
29         .create = setting_network_connection_create,
30         .destroy = setting_network_connection_destroy,
31         .update = setting_network_connection_update,
32         .cleanup = setting_network_connection_cleanup,
33 };
34
35 SettingNetworkUG *g_networkUG = NULL;
36 #define SUPPORT_EXPANDABLE_AUTHTYPE 1
37 #define URL_HEAD "http://"
38 /* ***************************************************
39  *
40  *basic func
41  *
42  ***************************************************/
43
44 static void
45 __network_connection_gl_mouse_up(void *data, Evas *e, Evas_Object *obj,
46                                  void *event)
47 {
48         ret_if(!data);
49         SettingNetworkUG *ad = (SettingNetworkUG *) data;
50
51         if (ad->data_acs_name) {
52                 setting_hide_input_pannel_cb(ad->data_acs_name->eo_check);
53         }
54         if (ad->data_user_name) {
55                 setting_hide_input_pannel_cb(ad->data_user_name->eo_check);
56         }
57         if (ad->data_pwd) {
58                 setting_hide_input_pannel_cb(ad->data_pwd->eo_check);
59         }
60         if (ad->data_pxy_addr) {
61                 setting_hide_input_pannel_cb(ad->data_pxy_addr->eo_check);
62         }
63         if (ad->data_pxy_port) {
64                 setting_hide_input_pannel_cb(ad->data_pxy_port->eo_check);
65         }
66         if (ad->data_hm_url) {
67                 setting_hide_input_pannel_cb(ad->data_hm_url->eo_check);
68         }
69
70 }
71
72 void __sub_list_rd_change(void *data, Evas_Object *obj, void *event_info)
73 {
74         SETTING_TRACE_BEGIN;
75         retm_if(data == NULL, "Data parameter is NULL");
76         Setting_GenGroupItem_Data *list_item =
77             (Setting_GenGroupItem_Data *) data;
78         list_item->chk_status = elm_radio_value_get(obj);       /*  for update */
79
80         Elm_Object_Item *subItem = list_item->item;
81         Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subItem);
82
83         Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subItem);    /* subItem data */
84         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
85
86         ret_if(NULL == data_subItem || NULL == data_parentItem);
87
88         data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
89         elm_object_item_data_set(data_parentItem->item, data_parentItem);
90         elm_genlist_item_update(data_parentItem->item);
91         setting_network_edit_connection_display_auth_type
92             (data_parentItem->userdata, list_item->chk_status);
93 }
94
95 void __sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
96 {
97         SETTING_TRACE_BEGIN;
98         /* error check */
99         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
100         Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
101         Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
102         elm_genlist_item_selected_set(subitem, 0);
103         Setting_GenGroupItem_Data *data_subItem =
104             elm_object_item_data_get(subitem);
105         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
106         ret_if(NULL == data_subItem || NULL == data_parentItem);
107
108         elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
109
110         data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
111         elm_object_item_data_set(data_parentItem->item, data_parentItem);
112         elm_genlist_item_update(data_parentItem->item);
113         setting_network_edit_connection_display_auth_type(data,
114                                                           data_subItem->chk_status);
115 }
116
117 static void __setting_network_connection_exp_cb(void *data, Evas_Object *obj,
118                                                 void *event_info)
119 {
120         ret_if(NULL == data || NULL == event_info);
121         SETTING_TRACE_BEGIN;
122         SettingNetworkUG *ad = (SettingNetworkUG *) data;
123         Elm_Object_Item *parentItem = event_info;       /* parent item */
124         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
125         Evas_Object *scroller = elm_object_item_widget_get(parentItem);
126
127         Evas_Object *rgd;
128         if (data_parentItem == ad->data_auth_type) {
129                 rgd = elm_radio_add(scroller);
130                 elm_radio_value_set(rgd, -1);
131
132                 setting_create_Gendial_exp_sub_field(scroller,
133                                                      &itc_1icon_1text_sub,
134                                                      __sub_list_sel_cb, ad,
135                                                      parentItem,
136                                                      SWALLOW_Type_1RADIO, rgd,
137                                                      NET_PDP_AUTH_PAP,
138                                                      "IDS_ST_MBODY_PAP",
139                                                      __sub_list_rd_change);
140
141                 setting_create_Gendial_exp_sub_field(scroller,
142                                                      &itc_1icon_1text_sub,
143                                                      __sub_list_sel_cb, ad,
144                                                      parentItem,
145                                                      SWALLOW_Type_1RADIO, rgd,
146                                                      NET_PDP_AUTH_CHAP,
147                                                      "IDS_ST_POP_CHAP",
148                                                      __sub_list_rd_change);
149
150                 setting_create_Gendial_exp_sub_field(scroller,
151                                                      &itc_1icon_1text_sub,
152                                                      __sub_list_sel_cb, ad,
153                                                      parentItem,
154                                                      SWALLOW_Type_1RADIO, rgd,
155                                                      NET_PDP_AUTH_NONE,
156                                                      "IDS_COM_BODY_NONE",
157                                                      __sub_list_rd_change);
158
159                 elm_radio_value_set(rgd, ad->chkType);
160         }
161 }
162
163 static void __genlist_disable_set(Evas_Object *genlist, bool disabled)
164 {
165         SETTING_TRACE_BEGIN;
166         ret_if (!genlist);
167         Elm_Object_Item *item = elm_genlist_first_item_get(genlist);
168         for(;item != elm_genlist_last_item_get(genlist);
169             item = elm_genlist_item_next_get(item))
170         {
171                 elm_object_item_disabled_set(item, disabled);
172
173                 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
174                 if (item_data == NULL) {
175                         SETTING_TRACE("item_data is null");
176                         continue;
177                 }
178                 if (item_data->swallow_type == SWALLOW_Type_LAYOUT_ENTRY) {
179                         elm_entry_context_menu_disabled_set(item_data->eo_check, disabled);
180                 }
181                 //elm_object_item_signal_emit(item, "elm,state,enabled", "elm");
182         }
183         elm_object_item_disabled_set(item, disabled);//the last one item
184         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
185         if (item_data == NULL) {
186                 SETTING_TRACE("item_data is null");
187                 return;
188         }
189         if (item_data->swallow_type == SWALLOW_Type_LAYOUT_ENTRY) {
190                 elm_entry_context_menu_disabled_set(item_data->eo_check, disabled);
191         }
192 }
193 static Eina_Bool __connection_idler(void *data)
194 {
195         SETTING_TRACE_BEGIN;
196         retv_if (!data, FALSE);
197         SettingNetworkUG *ad = data;
198         __genlist_disable_set(ad->scl_edit, TRUE);
199         setting_network_connection_hide_input_pannel(ad);
200         return FALSE;
201 }
202 void __get_connection_info(void *cb)
203 {
204         SETTING_TRACE_BEGIN;
205         ret_if(cb == NULL);
206         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
207         //int ret;
208         ad->ed_acs_name_desc = NULL;
209         ad->ed_user_name_desc = NULL;
210         ad->ed_pwd_desc = NULL;
211         G_FREE(ad->ed_pxy_addr_desc);
212         G_FREE(ad->ed_pxy_port_desc);
213         ad->ed_hm_url_desc = NULL;
214         ad->chkType = NET_PDP_AUTH_NONE;
215         ad->ed_auth_type_desc = NULL;
216
217         if (NULL == ad->prof_list)
218         {
219                 int err = net_get_profile_list(NET_DEVICE_CELLULAR, &(ad->prof_list), &(ad->prof_count));
220                 if (err != NET_ERR_NONE) {
221                         SETTING_TRACE_DEBUG
222                             ("%s*** [ERR] Internet net_get_app_profile_id. err=%d ***%s",
223                              SETTING_FONT_RED, err, SETTING_FONT_BLACK);
224                 }
225
226         }
227         //SETTING_TRACE("NET_ERR_UNKNOWN_METHOD:%d", NET_ERR_UNKNOWN_METHOD);
228
229         ad->prof_sel_idx = SETTING_ADD_PROFILE_INDEX;//need add new configuration
230         if (ad->prof_list)
231         {
232                 int ci = 0;
233                 for(ci = 0;ci < ad->prof_count;ci++){
234                         SETTING_TRACE_DEBUG("profList[%d].ProfileName:%s", ci,ad->prof_list[ci].ProfileName);
235                         SETTING_TRACE_DEBUG("profList[%d].profile_type:%d", ci, ad->prof_list[ci].profile_type);
236                         if(NET_DEVICE_CELLULAR == ad->prof_list[ci].profile_type) {
237                                 if (ad->con_type == ad->prof_list[ci].ProfileInfo.Pdp.ServiceType)
238                                 {
239                                         ad->prof_sel_idx = ci;
240                                         break;
241                                 }
242                         }
243                 }
244         }
245         SETTING_TRACE("ad->prof_sel_idx:%d", ad->prof_sel_idx);
246         char ProxyAddr[NET_PROXY_LEN_MAX+1] = {0,};
247         if (SETTING_ADD_PROFILE_INDEX != ad->prof_sel_idx)//found sucessfully
248         {
249                 /* load access name */
250                 ad->ed_acs_name_desc = ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.Apn;
251                 ad->ed_user_name_desc =
252                     ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.AuthInfo.UserName;
253                 ad->chkType =
254                     ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.AuthInfo.AuthType;
255                 ad->ed_pwd_desc =
256                     ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.AuthInfo.Password;
257
258                 switch (ad->chkType) {
259                 case NET_PDP_AUTH_PAP:
260                         ad->ed_auth_type_desc = _("IDS_ST_MBODY_PAP");
261                         break;
262                 case NET_PDP_AUTH_CHAP:
263                         ad->ed_auth_type_desc = _("IDS_ST_POP_CHAP");
264                         break;
265                 case NET_PDP_AUTH_NONE:
266                         ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
267                         break;
268                 default:
269                         ad->chkType = NET_PDP_AUTH_NONE;
270                         ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
271                         break;
272                 }
273
274
275                 char *full_addr = NULL;
276                 char *addr = NULL;
277                 char *port = NULL;
278                 //Fix the Port 'NULL' issue when enter connection view repeatly..
279                 full_addr = safeCopyStr(ProxyAddr, ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.net_info.ProxyAddr, NET_PROXY_LEN_MAX);
280                 int url_head_len = strlen(URL_HEAD);
281                 if (0 == safeStrNCmp(full_addr, URL_HEAD, url_head_len))
282                 {
283                         full_addr += url_head_len;
284                 }
285                 addr = strsep(&full_addr, ":");
286                 if (NULL == full_addr)//format like "http://127.0.0.1/" or "http://127.0.0.1"
287                 {
288                         SETTING_TRACE("NULL == full_addr");
289                         addr = strsep(&addr, "/");
290                 }
291                 if (is_ip_string(addr))
292                 {
293                         port = strsep(&full_addr, "/");
294                 }
295                 else //invalid format,let addr and port to be NULL.
296                 {
297                         addr = NULL;
298                 }
299
300                 ad->ed_pxy_addr_desc = g_strdup(addr);
301                 ad->ed_pxy_port_desc = g_strdup(port);
302
303                 if (ad->con_type == NET_SERVICE_MMS) {  /* Message Connection */
304                         ad->ed_hm_url_desc =
305                             ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.HomeURL;
306                 }
307         } else {
308                 ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
309                 ad->chkType = NET_PDP_AUTH_NONE;
310         }
311         return;
312 }
313 void __update_genlist_info(void *cb)
314 {
315         SETTING_TRACE_BEGIN;
316         ret_if(cb == NULL);
317         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
318         if (ad->data_acs_name)
319         {
320                 ad->data_acs_name->sub_desc = g_strdup(ad->ed_acs_name_desc);
321         }
322
323         if (ad->data_auth_type)
324         {
325                 ad->data_auth_type->sub_desc = g_strdup(ad->ed_auth_type_desc);
326                 if (ad->prof_list) {
327                         int authType = ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.AuthInfo.AuthType;
328                         ad->chkType = !ad->chkType;
329                         setting_network_edit_connection_display_auth_type(ad, authType);
330                 }
331         }
332         if (ad->data_user_name)
333         {
334                 ad->data_user_name->sub_desc = g_strdup(ad->ed_user_name_desc);
335         }
336         if (ad->data_pwd)
337         {
338                 ad->data_pwd->sub_desc = g_strdup(ad->ed_pwd_desc);
339         }
340
341         if (ad->data_pxy_addr)
342         {
343                 ad->data_pxy_addr->sub_desc = g_strdup(ad->ed_pxy_addr_desc);
344         }
345         if (ad->data_pxy_port)
346         {
347                 ad->data_pxy_port->sub_desc = g_strdup(ad->ed_pxy_port_desc);
348         }
349         if (ad->data_hm_url)
350         {
351                 ad->data_hm_url->sub_desc = g_strdup(ad->ed_hm_url_desc);
352         }
353         elm_genlist_realized_items_update(ad->scl_edit);
354         return;
355 }
356
357 static int setting_network_connection_create(void *cb)
358 {
359         SETTING_TRACE_BEGIN;
360         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
361
362         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
363
364         setting_retvm_if(NET_SERVICE_MMS != ad->con_type && NET_SERVICE_INTERNET != ad->con_type,
365                         SETTING_GENERAL_ERR_WRONG_PARAMETER,
366                         "Invalid connection type[%d]", ad->con_type)
367
368         const char *title = NULL;
369         if (ad->con_type == NET_SERVICE_INTERNET)
370         {       /*  Internet Connection & MMS Connection Head Title should be different. */
371                 title = _("IDS_ST_BODY_INTERNET_CONNECTION");
372         }
373         else
374         {
375                 title = _(STR_SETTING_MMS_CONNECTIONS);
376         }
377
378         Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
379         elm_object_style_set(scroller, "dialogue");
380         retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
381                  "Cannot set scroller object  as contento of layout");
382         elm_genlist_clear(scroller);    /* first to clear list */
383
384         /*  Enabling illume notification property for window */
385         elm_win_conformant_set(ad->win_main_layout, 1);
386         Evas_Object *conformant = elm_conformant_add(ad->win_main_layout);
387         elm_object_style_set(conformant, "internal_layout");    /*  By Kollus. 2011-01-04 */
388         evas_object_show(conformant);
389         elm_object_content_set(conformant, scroller);
390         ad->conformant = conformant;
391         /* connection intializes */
392         ad->data_hm_url = NULL;
393         ad->data_pwd = NULL;
394         ad->data_user_name = NULL;
395         ad->data_pxy_addr = NULL;
396         ad->data_acs_name = NULL;
397         ad->data_auth_type = NULL;
398
399         ad->navi_it = setting_push_layout_navi_bar((char *)title,
400                                      _("IDS_COM_BODY_BACK"),
401                                      _(KeyStr_Edit),
402                                      NULL,//_(KeyStr_Reset_Def),
403                                      setting_network_edit_connection_click_softkey_back_cb,
404                                      setting_network_edit_connection_click_softkey_eidt_cb,
405                                      setting_network_edit_connection_click_softkey_reset_cb,
406                                      ad, conformant, ad->navi_bar, &ad->controlbar);
407
408         retv_if(!ad->navi_it, SETTING_RETURN_FAIL);
409         ad->has_form_changed  = FALSE;
410
411         setting_enable_expandable_genlist(scroller, ad,
412                                           __setting_network_connection_exp_cb,
413                                           NULL);
414         evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP,
415                                        __network_connection_gl_mouse_up, ad);
416         __get_connection_info(ad);
417         Elm_Object_Item *item;
418
419         /* item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL); */
420         item =
421             elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
422                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
423         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
424         ad->data_acs_name =
425             setting_create_Gendial_field_def(scroller,
426                                              &itc_1icon, NULL,
427                                              NULL, SWALLOW_Type_LAYOUT_ENTRY,
428                                              NULL, NULL, 0,
429                                              "IDS_ST_BODY_ACCESS_NAME",
430                                              (char *)ad->ed_acs_name_desc,
431                                              setting_network_connection_entry_changed_cb);
432         if (ad->data_acs_name) {
433                 ad->data_acs_name->userdata = ad;
434         } else {
435                 SETTING_TRACE_ERROR("ad->data_acs_name is NULL");
436         }
437
438 #if !SUPPORT_EXPANDABLE_AUTHTYPE
439         (void)setting_create_Gendial_field_titleItem(scroller,
440                                                      &itc_group_item,
441                                                      "IDS_ST_BODY_AUTH_TYPE",
442                                                      NULL);
443         ad->chk_type = elm_radio_add(scroller);
444         elm_radio_state_value_set(ad->chk_type, -1);
445
446         ad->data_type_nor =
447             setting_create_Gendial_field_1radio(scroller,
448                                                 &itc_1text_1icon_2,
449                                                 setting_network_connection_mouse_up_Gendial_list_radio_cb,
450                                                 ad->chk_type,
451                                                 SWALLOW_Type_1RADIO,
452                                                 ad->chk_type, NET_PDP_AUTH_PAP,
453                                                 "IDS_ST_MBODY_PAP",
454                                                 setting_network_edit_connection_chk_changed);
455         if (ad->data_type_nor) {
456                 ad->data_type_nor->userdata = ad;
457         } else {
458                 SETTING_TRACE_ERROR("ad->data_type_nor is NULL");
459         }
460
461         ad->data_type_sec =
462             setting_create_Gendial_field_1radio(scroller,
463                                                 &itc_1text_1icon_2,
464                                                 setting_network_connection_mouse_up_Gendial_list_radio_cb,
465                                                 ad->chk_type,
466                                                 SWALLOW_Type_1RADIO,
467                                                 ad->chk_type, NET_PDP_AUTH_CHAP,
468                                                 "IDS_ST_POP_CHAP",
469                                                 setting_network_edit_connection_chk_changed);
470         if (ad->data_type_sec) {
471                 ad->data_type_sec->userdata = ad;
472         } else {
473                 SETTING_TRACE_ERROR("ad->data_type_sec is NULL");
474         }
475
476         ad->data_type_none =
477             setting_create_Gendial_field_1radio(scroller,
478                                                 &itc_1text_1icon_2,
479                                                 setting_network_connection_mouse_up_Gendial_list_radio_cb,
480                                                 ad->chk_type,
481                                                 SWALLOW_Type_1RADIO,
482                                                 ad->chk_type, NET_PDP_AUTH_NONE,
483                                                 "IDS_COM_BODY_NONE",
484                                                 setting_network_edit_connection_chk_changed);
485         if (ad->data_type_none) {
486                 ad->data_type_none->userdata = ad;
487         } else {
488                 SETTING_TRACE_ERROR("ad->data_type_none is NULL");
489         }
490
491         elm_radio_value_set(ad->chk_type, ad->chkType);
492
493         ad->item_above_user_name = item =
494             elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
495                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
496         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
497 #else
498         item =
499             elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
500                                     ELM_GENLIST_ITEM_GROUP, NULL, NULL);
501         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
502
503         ad->data_auth_type =
504             setting_create_Gendial_exp_parent_field(scroller,
505                                                     &itc_2text_3_parent,
506                                                     NULL, NULL,
507                                                     SWALLOW_Type_INVALID,
508                                                     "IDS_ST_BODY_AUTH_TYPE",
509                                                     (char *)ad->ed_auth_type_desc);
510         /* ad->data_auth_type->int_slp_setting_binded = INT_SLP_SETTING_INVALID; */
511         if (ad->data_auth_type) {
512                 ad->data_auth_type->userdata = ad;
513         } else {
514                 SETTING_TRACE_ERROR("ad->data_auth_type is NULL");
515         }
516
517         ad->item_above_user_name = item =
518             elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
519                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
520         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
521 #endif
522         ad->is_show_user = 0;
523         if (NET_PDP_AUTH_NONE != ad->chkType) {
524                 ad->data_user_name =
525                     setting_create_Gendial_field_def(scroller,
526                                                      &itc_1icon,
527                                                      NULL, NULL,
528                                                      SWALLOW_Type_LAYOUT_ENTRY,
529                                                      NULL, NULL, 0,
530                                                      "IDS_COM_BODY_USER_NAME",
531                                                      (char *)
532                                                      ad->ed_user_name_desc,
533                                                      setting_network_connection_entry_changed_cb);
534                 if (ad->data_user_name) {
535                         ad->data_user_name->userdata = ad;
536                 } else {
537                         SETTING_TRACE_ERROR("ad->data_user_name is NULL");
538                 }
539
540                 ad->data_pwd =
541                     setting_create_Gendial_field_def(scroller,
542                                                      &itc_1icon,
543                                                      NULL, NULL,
544                                                      SWALLOW_Type_LAYOUT_ENTRY,
545                                                      NULL, NULL, 0,
546                                                      "IDS_COM_BODY_PASSWORD",
547                                                      (char *)ad->ed_pwd_desc,
548                                                      setting_network_connection_entry_changed_cb);
549                 if (ad->data_pwd) {
550                         ad->data_pwd->userdata = ad;
551                         ad->is_show_user = 1;
552                         ad->data_pwd->isPasswordFlag = TRUE;
553                 } else {
554                         SETTING_TRACE_ERROR("ad->data_pwd is NULL");
555                 }
556
557                 ad->item_above_proxy_add = item =
558                     elm_genlist_item_append(scroller, &itc_seperator,
559                                             NULL, NULL, ELM_GENLIST_ITEM_NONE,
560                                             NULL, NULL);
561                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
562         }
563
564         ad->data_pxy_addr =
565             setting_create_Gendial_field_def(scroller,
566                                              &itc_1icon, NULL,
567                                              NULL, SWALLOW_Type_LAYOUT_ENTRY,
568                                              NULL, NULL, 0,
569                                              "IDS_ST_BODY_CONNECTIONSETTINGS_PROXY_ADDRESS",
570                                              (char *)ad->ed_pxy_addr_desc,
571                                              setting_network_connection_entry_changed_cb);
572         if (ad->data_pxy_addr) {
573                 ad->data_pxy_addr->userdata = ad;
574                 ad->data_pxy_addr->input_type = ELM_INPUT_PANEL_LAYOUT_IP;
575         } else {
576                 SETTING_TRACE_ERROR("ad->data_pxy_addr is NULL");
577         }
578
579         ad->data_pxy_port =
580             setting_create_Gendial_field_def(scroller,
581                                              &itc_1icon, NULL,
582                                              NULL, SWALLOW_Type_LAYOUT_ENTRY,
583                                              NULL, NULL, 0,
584                                              "IDS_ST_BODY_PROXY_PORT",
585                                              (char *)ad->ed_pxy_port_desc,
586                                              setting_network_connection_entry_changed_cb);
587         if (ad->data_pxy_port) {
588                 ad->data_pxy_port->userdata = ad;
589                 ad->data_pxy_port->input_type = ELM_INPUT_PANEL_LAYOUT_NUMBERONLY;
590         } else {
591                 SETTING_TRACE_ERROR("ad->data_pxy_port is NULL");
592         }
593
594         if (ad->con_type == NET_SERVICE_MMS) {  /*  mms Connection */
595                 ad->data_hm_url =
596                     setting_create_Gendial_field_def(scroller,
597                                                      &itc_1icon,
598                                                      NULL, NULL,
599                                                      SWALLOW_Type_LAYOUT_ENTRY,
600                                                      NULL, NULL, 0,
601                                                      "IDS_ST_BODY_HOME_URL",
602                                                      (char *)ad->ed_hm_url_desc,
603                                                      setting_network_connection_entry_changed_cb);
604                 if (ad->data_hm_url) {
605                         ad->data_hm_url->userdata = ad;
606                         ad->data_hm_url->input_type = ELM_INPUT_PANEL_LAYOUT_URL;
607                 } else {
608                         SETTING_TRACE_ERROR("ad->data_hm_url is NULL");
609                 }
610                 /* ad->is_show_url = 1; */
611         }
612
613         item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
614                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
615         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
616
617         setting_view_network_connection_create.is_create = 1;
618         ad->scl_edit = scroller;
619         __genlist_disable_set(ad->scl_edit, TRUE);
620         ecore_idler_add(__connection_idler, ad);
621         return SETTING_RETURN_SUCCESS;
622 }
623
624 static int setting_network_connection_destroy(void *cb)
625 {
626         SETTING_TRACE_BEGIN;
627         /* error check */
628         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
629
630         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
631         ad->navi_it = NULL;
632         ad->controlbar = NULL;
633         ad->back_btn = NULL;
634         //manager separatly,
635         if (ad->l_button)
636         {
637                 evas_object_del(ad->l_button);
638                 ad->l_button = NULL;
639         }
640         if (ad->m_button)
641         {
642                 evas_object_del(ad->m_button);
643                 ad->m_button = NULL;
644         }
645         if (ad->r_button)
646         {
647                 evas_object_del(ad->r_button);
648                 ad->r_button = NULL;
649         }
650
651         elm_naviframe_item_pop(ad->navi_bar);
652         setting_view_network_connection_create.is_create = 0;
653         return SETTING_RETURN_SUCCESS;
654 }
655
656 static int setting_network_connection_update(void *cb)
657 {
658         SETTING_TRACE_BEGIN;
659         return SETTING_RETURN_SUCCESS;
660 }
661
662 static int setting_network_connection_cleanup(void *cb)
663 {
664         return setting_network_connection_destroy(cb);
665 }
666
667 /* ***************************************************
668  *
669  *general func
670  *
671  ***************************************************/
672
673 static int setting_network_edit_connection_save_connection(void *data)
674 {
675         SETTING_TRACE_BEGIN;
676         /* error check */
677         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
678
679         SettingNetworkUG *ad = (SettingNetworkUG *) data;
680         const char *acs_name = NULL;
681         const char *usr_name = NULL;
682         const char *pwd = NULL;
683         const char *addr = NULL;
684         const char *port = NULL;
685         const char *home = NULL;
686
687         if (ad->data_acs_name)
688                 acs_name = ad->data_acs_name->sub_desc;
689         if (ad->data_user_name)
690                 usr_name = ad->data_user_name->sub_desc;
691         if (ad->data_pwd)
692                 pwd = ad->data_pwd->sub_desc;
693         if (ad->data_pxy_addr)
694                 addr = ad->data_pxy_addr->sub_desc;
695         if (ad->data_pxy_port)
696                 port = ad->data_pxy_port->sub_desc;
697
698         if (!acs_name)
699                 acs_name = "";
700         if (!usr_name)
701                 usr_name = "";
702         if (!pwd)
703                 pwd = "";
704         if (!addr)
705                 addr = "";
706         if (!port)
707                 port = "";
708         SETTING_TRACE("acs_name:%s", acs_name);
709         SETTING_TRACE("usr_name:%s", usr_name);
710         SETTING_TRACE("pwd:%s", pwd);
711
712         SETTING_TRACE("addr:%s", addr);
713         SETTING_TRACE("port:%s", port);
714         SETTING_TRACE("home:%s", home);
715
716         char sz_text[NET_PROXY_LEN_MAX + 1] = { 0, };
717         int type;
718         int ret = SETTING_RETURN_SUCCESS;
719         int err;
720
721         net_profile_info_t *con_info = NULL;
722         if (ad->prof_sel_idx != SETTING_ADD_PROFILE_INDEX) {
723                 con_info = &(ad->prof_list[ad->prof_sel_idx]);
724         } else {
725                 con_info = (net_profile_info_t *)calloc(1, sizeof(net_profile_info_t));
726         }
727         /* save access name */
728         if (!safeStrCmp(acs_name, "")) {
729                 setting_create_simple_popup(ad, ad->win_get,
730                                             NULL, _(Insert_Access_Name_desc));
731                 return SETTING_DNET_RETURN_NULL_ACCESS_NAME;
732         } else {
733                 safeCopyStr(con_info->ProfileInfo.Pdp.Apn, acs_name,
734                             NET_PDP_APN_LEN_MAX);
735         }
736
737         /* save auth type */
738         /* type = elm_radio_value_get(ad->chk_type); */
739         type = ad->chkType;
740
741         switch (type) {
742         case NET_PDP_AUTH_PAP:  /*  Normal */
743
744                 con_info->ProfileInfo.Pdp.AuthInfo.AuthType =
745                     NET_PDP_AUTH_PAP;
746
747                 break;
748
749         case NET_PDP_AUTH_CHAP: /*  Secure */
750
751                 con_info->ProfileInfo.Pdp.AuthInfo.AuthType =
752                     NET_PDP_AUTH_CHAP;
753
754                 break;
755
756         case NET_PDP_AUTH_NONE: /*  None */
757
758                 con_info->ProfileInfo.Pdp.AuthInfo.AuthType =
759                     NET_PDP_AUTH_NONE;
760
761                 break;
762         default:
763                 /* do nothing*/
764                 break;
765         }
766         /* save user name */
767         if (!safeStrCmp(usr_name, "")
768             && NET_PDP_AUTH_NONE != type) {
769                 setting_create_simple_popup(ad, ad->win_get,
770                                             NULL, _(Insert_User_Name_Desc));
771                 return SETTING_DNET_RETURN_NULL_USER_NAME;
772         } else {
773                 safeCopyStr(con_info->ProfileInfo.Pdp.AuthInfo.UserName,
774                             usr_name, NET_PDP_AUTH_USERNAME_LEN_MAX - 1);
775         }
776         /* save password */
777         if (!safeStrCmp(pwd, "")
778             && NET_PDP_AUTH_NONE != type) {
779                 setting_create_simple_popup(ad, ad->win_get,
780                                             NULL, _("IDS_ST_BODY_ENTER_PASSWORD"));
781                 return SETTING_DNET_RETURN_NULL_PASSWORD;
782         } else {
783                 safeCopyStr(con_info->ProfileInfo.Pdp.AuthInfo.Password, pwd,
784                             NET_PDP_AUTH_PASSWORD_LEN_MAX - 1);
785         }
786
787         /* save proxy addr */
788         if (!safeStrCmp(addr, "")) {
789                 /* addr = "0.0.0.0"; */
790                 ret = SETTING_DNET_RETURN_NULL_PROXY_ADDR;
791         } else if (!is_ip_string(addr)) {
792                 setting_create_simple_popup(ad, ad->win_get,
793                                             NULL, _("IDS_ST_HEADER_INCORRECT_PROXY_ADDRESS"));
794                 return SETTING_DNET_RETURN_INVALID_PROXY_ADDR;
795         }
796         /* check proxy port */
797         if (!safeStrCmp(port, "")) {
798                 /* port =  "80"; */
799                 ret = SETTING_DNET_RETURN_NULL_PROXY_PORT;
800         }
801
802         ret = snprintf(sz_text, sizeof(sz_text), "%s:%s", addr, port);
803         retv_if(ret < 0, SETTING_DNET_RETURN_ERR);
804         safeCopyStr(con_info->ProfileInfo.Pdp.net_info.ProxyAddr, sz_text,
805                     NET_PROXY_LEN_MAX);
806
807         /* save home url(message connection only) */
808         if (ad->con_type == NET_SERVICE_MMS) {  /* Message Connection */
809                 home = ad->data_hm_url->sub_desc;
810                 if (home == (char *)NULL) {
811                         safeCopyStr(con_info->ProfileInfo.Pdp.HomeURL,
812                                     URL_HEAD, NET_HOME_URL_LEN_MAX);
813                 } else {
814                         if (!safeStrCmp(home, "")) {
815                                 home = URL_HEAD;
816                                 ret = SETTING_DNET_RETURN_NULL_HOMEURL;
817                         }
818
819                         safeCopyStr(con_info->ProfileInfo.Pdp.HomeURL, home,
820                                     NET_HOME_URL_LEN_MAX);
821                 }
822         }
823
824         SETTING_TRACE("ad->con_type:%d", ad->con_type);
825         /* save connection */
826         if (ad->prof_sel_idx == SETTING_ADD_PROFILE_INDEX) {
827                 /* add connection */
828                 if (ad->con_type == NET_SERVICE_INTERNET) {     /* Internet Connection */
829                         safeCopyStr(con_info->ProfileName,
830                                     "IDS_ST_BODY_INTERNET_CONNECTION",
831                                     strlen("IDS_ST_BODY_INTERNET_CONNECTION"));
832                         //con_info->ProfileInfo.Pdp.ServiceCategoryId = 1;
833                 } else {
834                         safeCopyStr(con_info->ProfileName, STR_SETTING_MMS_CONNECTIONS,
835                                     strlen(STR_SETTING_MMS_CONNECTIONS));
836                         //con_info->ProfileInfo.Pdp.ServiceCategoryId = 2;
837                 }
838                 /** Specifies a protocol type */
839
840                 /** network information */
841                 con_info->ProfileInfo.Pdp.ServiceType = ad->con_type;
842
843                 con_info->profile_type = NET_DEVICE_CELLULAR;
844                 con_info->ProfileState = NET_STATE_TYPE_UNKNOWN;
845                 con_info->ProfileInfo.Pdp.ProtocolType = NET_PDP_TYPE_GPRS;
846                 err = net_add_profile(ad->con_type, con_info);
847                 if (err != NET_ERR_NONE) {
848                         SETTING_TRACE_DEBUG
849                             ("%s*** [ERR] net_add_profile. err=%d ***%s",
850                              SETTING_FONT_RED, err, SETTING_FONT_BLACK);
851                         ret = SETTING_DNET_RETURN_ERR;
852                         setting_create_simple_popup(ad, ad->win_get,
853                                                     NULL, _(Invok_API_Failed_Desc));
854                         return ret;
855                 }
856                 FREE(con_info);
857         } else {
858                 err = net_modify_profile(con_info->ProfileName, con_info);
859                 if (err != NET_ERR_NONE) {
860                         SETTING_TRACE_DEBUG
861                             ("%s*** [ERR] net_modify_profile. err=%d ***%s",
862                              SETTING_FONT_RED, err, SETTING_FONT_BLACK);
863                         ret = SETTING_DNET_RETURN_ERR;
864                 }
865         }
866         return ret;
867 }
868
869 /* ***************************************************
870  *
871  *call back func
872  *
873  ***************************************************/
874  #define BTN_STYLE_DEF "naviframe/title/default"
875 static void
876 setting_network_edit_connection_click_softkey_eidt_cb(void *data,
877                                                       Evas_Object *obj,
878                                                       void *event_info)
879 {
880         SETTING_TRACE_BEGIN;
881         /* error check */
882         retm_if(data == NULL, "Data parameter is NULL");
883
884         SettingNetworkUG *ad = (SettingNetworkUG *) data;
885         //setting_enable_evas_object(ad->scl_edit);
886         __genlist_disable_set(ad->scl_edit, FALSE);
887         /*  create buttons */
888         if (!ad->l_button) //go into first time
889         {
890                 ad->l_button = setting_create_button(ad->navi_bar, _("IDS_COM_SK_DONE"),
891                                                          BTN_STYLE_DEF,
892                                                          setting_network_edit_connection_click_softkey_save_cb,
893                                                          ad);
894         }
895
896         if (!ad->r_button) //go into first time
897         {
898                 ad->r_button = setting_create_button(ad->navi_bar, _("IDS_COM_SK_CANCEL"),
899                                                          BTN_STYLE_DEF,
900                                                          setting_network_edit_connection_click_softkey_cancel_cb,
901                                                          ad);
902         }
903         if (!ad->m_button) //go into first time
904         {
905                 ad->m_button = setting_create_button(ad->navi_bar, NULL,
906                                                          BTN_STYLE_DEF,
907                                                          NULL, ad);
908         }
909         if (ad->l_button) {
910                 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_LEFT, ad->l_button);
911                 evas_object_show(ad->l_button);
912         }
913         if (ad->r_button) {
914                 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_RIGHT, ad->r_button);
915                 ad->has_form_changed = TRUE;//intialize
916                 setting_network_connection_check_entry_empty(ad);
917                 ad->has_form_changed = FALSE;//restore
918         }
919         if (ad->m_button) {
920                 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_MORE, ad->m_button);
921                 evas_object_show(ad->r_button);
922         }
923
924         //remove '<-' button
925         ad->back_btn = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_PREV);
926         elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_PREV, NULL);
927         evas_object_hide(ad->back_btn);
928
929         //remove other buttons on controlbar
930         ad->controlbar = elm_object_item_part_content_unset(ad->navi_it, NAVI_CONTROLBAR_PART);
931         elm_object_item_part_content_set(ad->navi_it, NAVI_CONTROLBAR_PART, NULL);
932         evas_object_hide(ad->controlbar);
933 }
934 static void
935 setting_network_edit_connection_click_softkey_reset_cb(void *data,
936                                                       Evas_Object *obj,
937                                                       void *event_info)
938 {
939         SETTING_TRACE_BEGIN;
940         /* error check */
941         retm_if(data == NULL, "Data parameter is NULL");
942
943         SettingNetworkUG *ad = (SettingNetworkUG *) data;
944         net_profile_info_t *con_info = NULL;
945         int err = -1;
946         if (ad->prof_sel_idx != SETTING_ADD_PROFILE_INDEX) {
947                 con_info = &(ad->prof_list[ad->prof_sel_idx]);
948         } else {
949                 con_info = (net_profile_info_t *)calloc(1, sizeof(net_profile_info_t));
950                 setting_retm_if(!con_info, "Failed to alloc for net_profile_info_t");
951         }
952
953         const char *access_name = _("Connection");
954         int auth_type = NET_PDP_AUTH_NONE;
955         safeCopyStr(con_info->ProfileInfo.Pdp.Apn, access_name, NET_PDP_APN_LEN_MAX);
956         con_info->ProfileInfo.Pdp.AuthInfo.AuthType = auth_type;
957
958         safeCopyStr(con_info->ProfileInfo.Pdp.net_info.ProxyAddr, "0.0.0.0:80",
959                     NET_PROXY_LEN_MAX);
960         safeCopyStr(con_info->ProfileInfo.Pdp.HomeURL,
961                     URL_HEAD, NET_HOME_URL_LEN_MAX);
962
963         SETTING_TRACE("ad->con_type:%d", ad->con_type);
964         /* save connection */
965         if (ad->prof_sel_idx == SETTING_ADD_PROFILE_INDEX)
966         {
967                 /* add connection */
968                 if (ad->con_type == NET_SERVICE_INTERNET)
969                 {       /* Internet Connection */
970                         safeCopyStr(con_info->ProfileName,
971                                     "IDS_ST_BODY_INTERNET_CONNECTION",
972                                     strlen("IDS_ST_BODY_INTERNET_CONNECTION"));
973                         //con_info->ProfileInfo.Pdp.ServiceCategoryId = 1;
974                 }
975                 else
976                 {
977                         safeCopyStr(con_info->ProfileName, STR_SETTING_MMS_CONNECTIONS,
978                                     strlen(STR_SETTING_MMS_CONNECTIONS));
979                         //con_info->ProfileInfo.Pdp.ServiceCategoryId = 2;
980                 }
981                 /** Specifies a protocol type */
982
983                 /** network information */
984                 con_info->ProfileInfo.Pdp.ServiceType = ad->con_type;
985
986                 con_info->profile_type = NET_DEVICE_CELLULAR;
987                 con_info->ProfileState = NET_STATE_TYPE_UNKNOWN;
988                 con_info->ProfileInfo.Pdp.ProtocolType = NET_PDP_TYPE_GPRS;
989
990                 err = net_add_profile(ad->con_type, con_info);
991                 if (err != NET_ERR_NONE)
992                 {
993                         SETTING_TRACE_DEBUG
994                             ("%s*** [ERR] net_add_profile. err=%d ***%s",
995                              SETTING_FONT_RED, err, SETTING_FONT_BLACK);
996                         setting_create_simple_popup(ad, ad->win_get,
997                                                     NULL, _(Invok_API_Failed_Desc));
998                 }
999                 FREE(con_info);
1000         }
1001         else
1002         {
1003                 err = net_modify_profile(con_info->ProfileName, con_info);
1004                 if (err != NET_ERR_NONE)
1005                 {
1006                         SETTING_TRACE_DEBUG
1007                             ("%s*** [ERR] net_modify_profile. err=%d ***%s",
1008                              SETTING_FONT_RED, err, SETTING_FONT_BLACK);
1009                 }
1010         }
1011
1012         if (err == NET_ERR_NONE) //update genlist when it operaters sucessfully
1013         {
1014                 if (!ad->prof_list) __get_connection_info(ad);//maybe new added
1015                 ad->ed_acs_name_desc = access_name;
1016                 ad->ed_user_name_desc = NULL;
1017                 ad->ed_pwd_desc = NULL;
1018                 ad->ed_pxy_addr_desc = g_strdup("0.0.0.0");
1019                 ad->ed_pxy_port_desc = g_strdup("80");
1020                 ad->ed_hm_url_desc = URL_HEAD;
1021                 ad->chkType = NET_PDP_AUTH_NONE;
1022                 ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
1023                 __update_genlist_info(ad);
1024         }
1025         else
1026         {
1027                 elm_genlist_realized_items_update(ad->scl_edit);//refresh genlist
1028         }
1029         ecore_idler_add(__connection_idler, ad);
1030 }
1031
1032 static void
1033 setting_network_edit_connection_click_softkey_save_cb(void *data,
1034                                                       Evas_Object *obj,
1035                                                       void *event_info)
1036 {
1037         SETTING_TRACE_BEGIN;
1038         /* error check */
1039         retm_if(data == NULL, "Data parameter is NULL");
1040
1041         SettingNetworkUG *ad = (SettingNetworkUG *) data;
1042         /* elm_box_unpack_all(ad->bx_blk); */
1043         /* elm_dialoguegroup_remove_all(ad->dg_blk); */
1044
1045         int ret = setting_network_edit_connection_save_connection(ad);
1046         /* need special handle */
1047         if (SETTING_DNET_RETURN_NULL_ACCESS_NAME == ret
1048             || SETTING_DNET_RETURN_NULL_USER_NAME == ret
1049             || SETTING_DNET_RETURN_NULL_PASSWORD == ret
1050             || SETTING_DNET_RETURN_INVALID_PROXY_ADDR == ret) {
1051                 return;
1052         }
1053         if (ret != SETTING_RETURN_SUCCESS) {
1054                 SETTING_TRACE_DEBUG
1055                     ("%s*** [ERR] setting_network_edit_connection_save_connection ***%s",
1056                      SETTING_FONT_RED, SETTING_FONT_BLACK);
1057         }
1058
1059         setting_create_popup_without_btn(ad, ad->win_get, NULL, _(KeyStr_Saved), NULL, POPUP_INTERVAL, FALSE, FALSE);
1060         //re-fetch connection info..
1061         FREE(ad->prof_list);
1062         __get_connection_info(ad);
1063
1064         setting_network_edit_connection_click_softkey_cancel_cb(ad, ad->r_button, NULL);
1065 }
1066
1067 static void
1068 setting_network_edit_connection_click_softkey_back_cb(void *data,
1069                                                         Evas_Object *obj,
1070                                                         void *event_info)
1071 {
1072         SETTING_TRACE_BEGIN;
1073         /* error check */
1074         retm_if(data == NULL, "Data parameter is NULL");
1075
1076         SettingNetworkUG *ad = (SettingNetworkUG *) data;
1077         /* elm_box_unpack_all(ad->bx_blk); */
1078         /* elm_dialoguegroup_remove_all(ad->dg_blk); */
1079         setting_view_change(&setting_view_network_connection_create,
1080                             &setting_view_network_main, ad);
1081 }
1082 static void
1083 setting_network_edit_connection_click_softkey_cancel_cb(void *data,
1084                                                         Evas_Object *obj,
1085                                                         void *event_info)
1086 {
1087         SETTING_TRACE_BEGIN;
1088         /* error check */
1089         retm_if(data == NULL, "Data parameter is NULL");
1090
1091         SettingNetworkUG *ad = (SettingNetworkUG *) data;
1092         ad->l_button = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_LEFT);
1093         elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_LEFT, NULL);
1094         evas_object_hide(ad->l_button);
1095
1096         ad->m_button = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_MORE);
1097         elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_MORE, NULL);
1098         evas_object_hide(ad->m_button);
1099
1100         ad->r_button = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_RIGHT);
1101         elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_RIGHT, NULL);
1102         evas_object_hide(ad->r_button);
1103         //setting_disable_evas_object(ad->r_button);
1104         setting_undo_dim_evas_object(ad->r_button, TRUE);
1105
1106         elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_PREV, ad->back_btn);
1107         elm_object_item_part_content_set(ad->navi_it, NAVI_CONTROLBAR_PART, ad->controlbar);
1108         evas_object_show(ad->back_btn);
1109         evas_object_show(ad->controlbar);
1110
1111         __get_connection_info(ad);
1112         __update_genlist_info(ad);
1113         if(ad->data_auth_type) elm_genlist_item_expanded_set(ad->data_auth_type->item, FALSE);
1114         ecore_idler_add(__connection_idler, ad);
1115 }
1116 static void _gl_Gendial_sel(void *data, Evas_Object *obj, void *event_info)
1117 {
1118         /* SETTING_TRACE_BEGIN; */
1119         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1120         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1121         elm_genlist_item_selected_set(item, 0);
1122         return;
1123 }
1124
1125 static void setting_network_connection_check_entry_empty(SettingNetworkUG *ad)
1126 {
1127         SETTING_TRACE_BEGIN;
1128         if (!ad->has_form_changed)
1129         {
1130                 SETTING_TRACE_DEBUG("ad->has_form_changed == FALSE!");
1131                 return;
1132         }
1133         bool isFoundEmptyEntry = FALSE;
1134
1135         do {
1136                 if (ad->data_acs_name && isEmptyStr(ad->data_acs_name->sub_desc)) {
1137                         SETTING_TRACE("entry_str:%s", ad->data_acs_name->sub_desc);
1138                         isFoundEmptyEntry = TRUE;
1139                         break;
1140                 }
1141                 if (ad->data_user_name && isEmptyStr(ad->data_user_name->sub_desc)) {
1142                         SETTING_TRACE("entry_str:%s", ad->data_user_name->sub_desc);
1143                         isFoundEmptyEntry = TRUE;
1144                         break;
1145                 }
1146                 if (ad->data_pwd && isEmptyStr(ad->data_pwd->sub_desc)) {
1147                         SETTING_TRACE("entry_str:%s", ad->data_pwd->sub_desc);
1148                         isFoundEmptyEntry = TRUE;
1149                         break;
1150                 }
1151                 if (ad->data_hm_url && isEmptyStr(ad->data_hm_url->sub_desc)) {
1152                         SETTING_TRACE("entry_str:%s", ad->data_hm_url->sub_desc);
1153                         isFoundEmptyEntry = TRUE;
1154                         break;
1155                 }
1156         } while (0);
1157         Evas_Object *done_btn = elm_object_item_part_content_get(ad->navi_it, NAVI_BTN_STYLE_LEFT);
1158         if (isFoundEmptyEntry) {
1159                 if (!evas_object_pass_events_get(done_btn)) {//it had not yet been disabled
1160                         setting_disable_evas_object(done_btn);
1161                         setting_dim_evas_object(done_btn, TRUE);
1162                 }
1163                 else
1164                 {
1165                     //do nothing..if invoke setting_dim_evas_object many times, the done button will be dimer until it cannot be see.
1166                     //refer to the API of setting_dim_evas_object(). The API is supplied by Setting itself, winset doesn't support until now as I now.
1167                 }
1168         } else {
1169                 setting_enable_evas_object(done_btn);
1170                 setting_undo_dim_evas_object(done_btn, TRUE);
1171         }
1172 }
1173
1174 static void
1175 setting_network_edit_connection_display_auth_type(SettingNetworkUG *ad,
1176                                                   int auth_type)
1177 {
1178         SETTING_TRACE_BEGIN;
1179         retm_if(ad == NULL, "Data parameter is NULL");
1180         if (ad->chkType == auth_type) return;
1181
1182         ad->chkType = auth_type;        /* for update genlist */
1183         if (NET_PDP_AUTH_NONE != auth_type) {   /* to show */
1184                 SETTING_TRACE("ad->is_show_user:%d", ad->is_show_user);
1185                 if (ad->is_show_user == 0) {    /* do only when hiden */
1186                         SETTING_TRACE("to create");
1187
1188                         ad->data_user_name =
1189                             (Setting_GenGroupItem_Data *) calloc(1,
1190                                                                  sizeof
1191                                                                  (Setting_GenGroupItem_Data));
1192                         setting_retm_if(ad->data_user_name == NULL, "calloc failed");
1193                         ad->data_user_name->keyStr =
1194                             (char *)g_strdup("IDS_COM_BODY_USER_NAME");
1195                         ad->data_user_name->sub_desc =
1196                             (char *)g_strdup(ad->ed_user_name_desc);
1197                         ad->data_user_name->swallow_type =
1198                             SWALLOW_Type_LAYOUT_ENTRY;
1199                         ad->data_user_name->userdata = ad;
1200                         ad->data_user_name->chk_change_cb =
1201                             setting_network_connection_entry_changed_cb;
1202                         ad->data_user_name->item =
1203                             elm_genlist_item_insert_after(ad->scl_edit,
1204                                                           &itc_1icon,
1205                                                           ad->data_user_name,
1206                                                           NULL,
1207                                                           ad->item_above_user_name,
1208                                                           ELM_GENLIST_ITEM_NONE,
1209                                                           _gl_Gendial_sel, ad);
1210
1211                         ad->data_pwd =
1212                             (Setting_GenGroupItem_Data *) calloc(1,
1213                                                                  sizeof
1214                                                                  (Setting_GenGroupItem_Data));
1215
1216                         setting_retm_if(ad->data_pwd == NULL, "calloc failed");
1217                         ad->data_pwd->keyStr =
1218                             (char *)g_strdup("IDS_COM_BODY_PASSWORD");
1219                         ad->data_pwd->sub_desc =
1220                             (char *)g_strdup(ad->ed_pwd_desc);
1221                         ad->data_pwd->swallow_type = SWALLOW_Type_LAYOUT_ENTRY;
1222                         ad->data_pwd->userdata = ad;
1223                         ad->data_pwd->chk_change_cb =
1224                             setting_network_connection_entry_changed_cb;
1225                         ad->data_pwd->isPasswordFlag = TRUE;
1226                         /* ad->data_pwd->chk_change_cb = chk_change_cb; */
1227                         ad->data_pwd->item =
1228                             elm_genlist_item_insert_after(ad->scl_edit,
1229                                                           &itc_1icon,
1230                                                           ad->data_pwd, NULL,
1231                                                           ad->
1232                                                           data_user_name->item,
1233                                                           ELM_GENLIST_ITEM_NONE,
1234                                                           _gl_Gendial_sel, ad);
1235
1236                         ad->item_above_proxy_add =
1237                             elm_genlist_item_insert_after(ad->scl_edit,
1238                                                           &itc_seperator,
1239                                                           NULL, NULL,
1240                                                           ad->data_pwd->item,
1241                                                           ELM_GENLIST_ITEM_NONE,
1242                                                           NULL, NULL);
1243                         elm_genlist_item_select_mode_set
1244                             (ad->item_above_proxy_add, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1245
1246                         ad->has_form_changed  = TRUE;
1247                         setting_network_connection_check_entry_empty(ad);
1248                         /* ad->is_show_user = 1; */
1249                 }
1250                 ad->is_show_user = 1;
1251         } else {                /* to hide */
1252
1253                 SETTING_TRACE("ad->is_show_user:%d", ad->is_show_user);
1254                 if (ad->is_show_user == 1) {    /* do only when shown */
1255                         SETTING_TRACE("to destroy");
1256                         if (ad->data_user_name) {
1257                                 elm_object_item_del(ad->data_user_name->item);
1258                                 ad->data_user_name = NULL;
1259                         }
1260                         if (ad->data_pwd) {
1261                                 elm_object_item_del(ad->data_pwd->item);
1262                                 ad->data_pwd = NULL;
1263                         }
1264                         if (ad->item_above_proxy_add) {
1265                                 elm_object_item_del(ad->item_above_proxy_add);
1266                                 ad->item_above_proxy_add = NULL;
1267                         }
1268
1269                 }
1270                 ad->has_form_changed  = TRUE;
1271                 setting_network_connection_check_entry_empty(ad);
1272                 ad->is_show_user = 0;
1273
1274         }
1275 }
1276
1277 static void
1278 setting_network_connection_entry_changed_cb(void *data, Evas_Object *obj,
1279                                             void *event_info)
1280 {
1281         SETTING_TRACE_BEGIN;
1282         retm_if(data == NULL, "Data parameter is NULL");
1283         Setting_GenGroupItem_Data *list_item =
1284             (Setting_GenGroupItem_Data *) data;
1285         SettingNetworkUG *ad = list_item->userdata;
1286         const char *entry_str = elm_entry_entry_get(obj);
1287         list_item->sub_desc = (char *)g_strdup(entry_str);
1288         ad->has_form_changed  = TRUE;
1289         setting_network_connection_check_entry_empty(ad);
1290 }
1291 static void
1292 setting_network_connection_hide_input_pannel(void *data)
1293 {
1294         SETTING_TRACE_BEGIN;
1295         retm_if(data == NULL, "Data parameter is NULL");
1296         SettingNetworkUG *ad = data;
1297         if (ad->data_acs_name) {
1298                 setting_hide_input_pannel_cb(ad->data_acs_name->eo_check);
1299         }
1300         if (ad->data_user_name) {
1301                 setting_hide_input_pannel_cb(ad->data_user_name->eo_check);
1302         }
1303         if (ad->data_pwd) {
1304                 setting_hide_input_pannel_cb(ad->data_pwd->eo_check);
1305         }
1306         if (ad->data_pxy_addr) {
1307                 setting_hide_input_pannel_cb(ad->data_pxy_addr->eo_check);
1308         }
1309         if (ad->data_pxy_port) {
1310                 setting_hide_input_pannel_cb(ad->data_pxy_port->eo_check);
1311         }
1312         if (ad->data_hm_url) {
1313                 setting_hide_input_pannel_cb(ad->data_hm_url->eo_check);
1314         }
1315 }
1316