4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <setting-network-connection-create.h>
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);
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,
35 SettingNetworkUG *g_networkUG = NULL;
36 #define SUPPORT_EXPANDABLE_AUTHTYPE 1
37 #define URL_HEAD "http://"
38 /* ***************************************************
42 ***************************************************/
45 __network_connection_gl_mouse_up(void *data, Evas *e, Evas_Object *obj,
49 SettingNetworkUG *ad = (SettingNetworkUG *) data;
51 if (ad->data_acs_name) {
52 setting_hide_input_pannel_cb(ad->data_acs_name->eo_check);
54 if (ad->data_user_name) {
55 setting_hide_input_pannel_cb(ad->data_user_name->eo_check);
58 setting_hide_input_pannel_cb(ad->data_pwd->eo_check);
60 if (ad->data_pxy_addr) {
61 setting_hide_input_pannel_cb(ad->data_pxy_addr->eo_check);
63 if (ad->data_pxy_port) {
64 setting_hide_input_pannel_cb(ad->data_pxy_port->eo_check);
66 if (ad->data_hm_url) {
67 setting_hide_input_pannel_cb(ad->data_hm_url->eo_check);
72 void __sub_list_rd_change(void *data, Evas_Object *obj, void *event_info)
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 */
80 Elm_Object_Item *subItem = list_item->item;
81 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subItem);
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 */
86 ret_if(NULL == data_subItem || NULL == data_parentItem);
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);
95 void __sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
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);
108 elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
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);
117 static void __setting_network_connection_exp_cb(void *data, Evas_Object *obj,
120 ret_if(NULL == data || NULL == event_info);
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);
128 if (data_parentItem == ad->data_auth_type) {
129 rgd = elm_radio_add(scroller);
130 elm_radio_value_set(rgd, -1);
132 setting_create_Gendial_exp_sub_field(scroller,
133 &itc_1icon_1text_sub,
134 __sub_list_sel_cb, ad,
136 SWALLOW_Type_1RADIO, rgd,
139 __sub_list_rd_change);
141 setting_create_Gendial_exp_sub_field(scroller,
142 &itc_1icon_1text_sub,
143 __sub_list_sel_cb, ad,
145 SWALLOW_Type_1RADIO, rgd,
148 __sub_list_rd_change);
150 setting_create_Gendial_exp_sub_field(scroller,
151 &itc_1icon_1text_sub,
152 __sub_list_sel_cb, ad,
154 SWALLOW_Type_1RADIO, rgd,
157 __sub_list_rd_change);
159 elm_radio_value_set(rgd, ad->chkType);
163 static void __genlist_disable_set(Evas_Object *genlist, bool disabled)
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))
171 elm_object_item_disabled_set(item, disabled);
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");
178 if (item_data->swallow_type == SWALLOW_Type_LAYOUT_ENTRY) {
179 elm_entry_context_menu_disabled_set(item_data->eo_check, disabled);
181 //elm_object_item_signal_emit(item, "elm,state,enabled", "elm");
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");
189 if (item_data->swallow_type == SWALLOW_Type_LAYOUT_ENTRY) {
190 elm_entry_context_menu_disabled_set(item_data->eo_check, disabled);
193 static Eina_Bool __connection_idler(void *data)
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);
202 void __get_connection_info(void *cb)
206 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
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;
217 if (NULL == ad->prof_list)
219 int err = net_get_profile_list(NET_DEVICE_CELLULAR, &(ad->prof_list), &(ad->prof_count));
220 if (err != NET_ERR_NONE) {
222 ("%s*** [ERR] Internet net_get_app_profile_id. err=%d ***%s",
223 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
227 //SETTING_TRACE("NET_ERR_UNKNOWN_METHOD:%d", NET_ERR_UNKNOWN_METHOD);
229 ad->prof_sel_idx = SETTING_ADD_PROFILE_INDEX;//need add new configuration
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)
239 ad->prof_sel_idx = ci;
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
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;
254 ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.AuthInfo.AuthType;
256 ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.AuthInfo.Password;
258 switch (ad->chkType) {
259 case NET_PDP_AUTH_PAP:
260 ad->ed_auth_type_desc = _("IDS_ST_MBODY_PAP");
262 case NET_PDP_AUTH_CHAP:
263 ad->ed_auth_type_desc = _("IDS_ST_POP_CHAP");
265 case NET_PDP_AUTH_NONE:
266 ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
269 ad->chkType = NET_PDP_AUTH_NONE;
270 ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
275 char *full_addr = 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))
283 full_addr += url_head_len;
285 addr = strsep(&full_addr, ":");
286 if (NULL == full_addr)//format like "http://127.0.0.1/" or "http://127.0.0.1"
288 SETTING_TRACE("NULL == full_addr");
289 addr = strsep(&addr, "/");
291 if (is_ip_string(addr))
293 port = strsep(&full_addr, "/");
295 else //invalid format,let addr and port to be NULL.
300 ad->ed_pxy_addr_desc = g_strdup(addr);
301 ad->ed_pxy_port_desc = g_strdup(port);
303 if (ad->con_type == NET_SERVICE_MMS) { /* Message Connection */
305 ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.HomeURL;
308 ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
309 ad->chkType = NET_PDP_AUTH_NONE;
313 void __update_genlist_info(void *cb)
317 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
318 if (ad->data_acs_name)
320 ad->data_acs_name->sub_desc = g_strdup(ad->ed_acs_name_desc);
323 if (ad->data_auth_type)
325 ad->data_auth_type->sub_desc = g_strdup(ad->ed_auth_type_desc);
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);
332 if (ad->data_user_name)
334 ad->data_user_name->sub_desc = g_strdup(ad->ed_user_name_desc);
338 ad->data_pwd->sub_desc = g_strdup(ad->ed_pwd_desc);
341 if (ad->data_pxy_addr)
343 ad->data_pxy_addr->sub_desc = g_strdup(ad->ed_pxy_addr_desc);
345 if (ad->data_pxy_port)
347 ad->data_pxy_port->sub_desc = g_strdup(ad->ed_pxy_port_desc);
351 ad->data_hm_url->sub_desc = g_strdup(ad->ed_hm_url_desc);
353 elm_genlist_realized_items_update(ad->scl_edit);
357 static int setting_network_connection_create(void *cb)
360 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
362 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
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)
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");
375 title = _(STR_SETTING_MMS_CONNECTIONS);
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 */
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;
394 ad->data_user_name = NULL;
395 ad->data_pxy_addr = NULL;
396 ad->data_acs_name = NULL;
397 ad->data_auth_type = NULL;
399 ad->navi_it = setting_push_layout_navi_bar((char *)title,
400 _("IDS_COM_BODY_BACK"),
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);
408 retv_if(!ad->navi_it, SETTING_RETURN_FAIL);
409 ad->has_form_changed = FALSE;
411 setting_enable_expandable_genlist(scroller, ad,
412 __setting_network_connection_exp_cb,
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;
419 /* item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL); */
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);
425 setting_create_Gendial_field_def(scroller,
427 NULL, SWALLOW_Type_LAYOUT_ENTRY,
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;
435 SETTING_TRACE_ERROR("ad->data_acs_name is NULL");
438 #if !SUPPORT_EXPANDABLE_AUTHTYPE
439 (void)setting_create_Gendial_field_titleItem(scroller,
441 "IDS_ST_BODY_AUTH_TYPE",
443 ad->chk_type = elm_radio_add(scroller);
444 elm_radio_state_value_set(ad->chk_type, -1);
447 setting_create_Gendial_field_1radio(scroller,
449 setting_network_connection_mouse_up_Gendial_list_radio_cb,
452 ad->chk_type, NET_PDP_AUTH_PAP,
454 setting_network_edit_connection_chk_changed);
455 if (ad->data_type_nor) {
456 ad->data_type_nor->userdata = ad;
458 SETTING_TRACE_ERROR("ad->data_type_nor is NULL");
462 setting_create_Gendial_field_1radio(scroller,
464 setting_network_connection_mouse_up_Gendial_list_radio_cb,
467 ad->chk_type, NET_PDP_AUTH_CHAP,
469 setting_network_edit_connection_chk_changed);
470 if (ad->data_type_sec) {
471 ad->data_type_sec->userdata = ad;
473 SETTING_TRACE_ERROR("ad->data_type_sec is NULL");
477 setting_create_Gendial_field_1radio(scroller,
479 setting_network_connection_mouse_up_Gendial_list_radio_cb,
482 ad->chk_type, NET_PDP_AUTH_NONE,
484 setting_network_edit_connection_chk_changed);
485 if (ad->data_type_none) {
486 ad->data_type_none->userdata = ad;
488 SETTING_TRACE_ERROR("ad->data_type_none is NULL");
491 elm_radio_value_set(ad->chk_type, ad->chkType);
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);
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);
504 setting_create_Gendial_exp_parent_field(scroller,
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;
514 SETTING_TRACE_ERROR("ad->data_auth_type is NULL");
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);
522 ad->is_show_user = 0;
523 if (NET_PDP_AUTH_NONE != ad->chkType) {
525 setting_create_Gendial_field_def(scroller,
528 SWALLOW_Type_LAYOUT_ENTRY,
530 "IDS_COM_BODY_USER_NAME",
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;
537 SETTING_TRACE_ERROR("ad->data_user_name is NULL");
541 setting_create_Gendial_field_def(scroller,
544 SWALLOW_Type_LAYOUT_ENTRY,
546 "IDS_COM_BODY_PASSWORD",
547 (char *)ad->ed_pwd_desc,
548 setting_network_connection_entry_changed_cb);
550 ad->data_pwd->userdata = ad;
551 ad->is_show_user = 1;
552 ad->data_pwd->isPasswordFlag = TRUE;
554 SETTING_TRACE_ERROR("ad->data_pwd is NULL");
557 ad->item_above_proxy_add = item =
558 elm_genlist_item_append(scroller, &itc_seperator,
559 NULL, NULL, ELM_GENLIST_ITEM_NONE,
561 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
565 setting_create_Gendial_field_def(scroller,
567 NULL, SWALLOW_Type_LAYOUT_ENTRY,
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;
576 SETTING_TRACE_ERROR("ad->data_pxy_addr is NULL");
580 setting_create_Gendial_field_def(scroller,
582 NULL, SWALLOW_Type_LAYOUT_ENTRY,
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;
591 SETTING_TRACE_ERROR("ad->data_pxy_port is NULL");
594 if (ad->con_type == NET_SERVICE_MMS) { /* mms Connection */
596 setting_create_Gendial_field_def(scroller,
599 SWALLOW_Type_LAYOUT_ENTRY,
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;
608 SETTING_TRACE_ERROR("ad->data_hm_url is NULL");
610 /* ad->is_show_url = 1; */
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);
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;
624 static int setting_network_connection_destroy(void *cb)
628 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
630 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
632 ad->controlbar = NULL;
637 evas_object_del(ad->l_button);
642 evas_object_del(ad->m_button);
647 evas_object_del(ad->r_button);
651 elm_naviframe_item_pop(ad->navi_bar);
652 setting_view_network_connection_create.is_create = 0;
653 return SETTING_RETURN_SUCCESS;
656 static int setting_network_connection_update(void *cb)
659 return SETTING_RETURN_SUCCESS;
662 static int setting_network_connection_cleanup(void *cb)
664 return setting_network_connection_destroy(cb);
667 /* ***************************************************
671 ***************************************************/
673 static int setting_network_edit_connection_save_connection(void *data)
677 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
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;
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;
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;
708 SETTING_TRACE("acs_name:%s", acs_name);
709 SETTING_TRACE("usr_name:%s", usr_name);
710 SETTING_TRACE("pwd:%s", pwd);
712 SETTING_TRACE("addr:%s", addr);
713 SETTING_TRACE("port:%s", port);
714 SETTING_TRACE("home:%s", home);
716 char sz_text[NET_PROXY_LEN_MAX + 1] = { 0, };
718 int ret = SETTING_RETURN_SUCCESS;
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]);
725 con_info = (net_profile_info_t *)calloc(1, sizeof(net_profile_info_t));
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;
733 safeCopyStr(con_info->ProfileInfo.Pdp.Apn, acs_name,
734 NET_PDP_APN_LEN_MAX);
738 /* type = elm_radio_value_get(ad->chk_type); */
742 case NET_PDP_AUTH_PAP: /* Normal */
744 con_info->ProfileInfo.Pdp.AuthInfo.AuthType =
749 case NET_PDP_AUTH_CHAP: /* Secure */
751 con_info->ProfileInfo.Pdp.AuthInfo.AuthType =
756 case NET_PDP_AUTH_NONE: /* None */
758 con_info->ProfileInfo.Pdp.AuthInfo.AuthType =
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;
773 safeCopyStr(con_info->ProfileInfo.Pdp.AuthInfo.UserName,
774 usr_name, NET_PDP_AUTH_USERNAME_LEN_MAX - 1);
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;
783 safeCopyStr(con_info->ProfileInfo.Pdp.AuthInfo.Password, pwd,
784 NET_PDP_AUTH_PASSWORD_LEN_MAX - 1);
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;
796 /* check proxy port */
797 if (!safeStrCmp(port, "")) {
799 ret = SETTING_DNET_RETURN_NULL_PROXY_PORT;
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,
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);
814 if (!safeStrCmp(home, "")) {
816 ret = SETTING_DNET_RETURN_NULL_HOMEURL;
819 safeCopyStr(con_info->ProfileInfo.Pdp.HomeURL, home,
820 NET_HOME_URL_LEN_MAX);
824 SETTING_TRACE("ad->con_type:%d", ad->con_type);
825 /* save connection */
826 if (ad->prof_sel_idx == SETTING_ADD_PROFILE_INDEX) {
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;
834 safeCopyStr(con_info->ProfileName, STR_SETTING_MMS_CONNECTIONS,
835 strlen(STR_SETTING_MMS_CONNECTIONS));
836 //con_info->ProfileInfo.Pdp.ServiceCategoryId = 2;
838 /** Specifies a protocol type */
840 /** network information */
841 con_info->ProfileInfo.Pdp.ServiceType = ad->con_type;
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) {
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, _("IDS_COM_POP_FAILED"));
858 err = net_modify_profile(con_info->ProfileName, con_info);
859 if (err != NET_ERR_NONE) {
861 ("%s*** [ERR] net_modify_profile. err=%d ***%s",
862 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
863 ret = SETTING_DNET_RETURN_ERR;
864 setting_create_simple_popup(ad, ad->win_get,
865 NULL, _("IDS_COM_POP_FAILED"));
871 /* ***************************************************
875 ***************************************************/
876 #define BTN_STYLE_DEF "naviframe/title/default"
878 setting_network_edit_connection_click_softkey_eidt_cb(void *data,
884 retm_if(data == NULL, "Data parameter is NULL");
886 SettingNetworkUG *ad = (SettingNetworkUG *) data;
887 //setting_enable_evas_object(ad->scl_edit);
888 __genlist_disable_set(ad->scl_edit, FALSE);
890 if (!ad->l_button) //go into first time
892 ad->l_button = setting_create_button(ad->navi_bar, _("IDS_COM_SK_DONE"),
894 setting_network_edit_connection_click_softkey_save_cb,
898 if (!ad->r_button) //go into first time
900 ad->r_button = setting_create_button(ad->navi_bar, _("IDS_COM_SK_CANCEL"),
902 setting_network_edit_connection_click_softkey_cancel_cb,
905 if (!ad->m_button) //go into first time
907 ad->m_button = setting_create_button(ad->navi_bar, NULL,
912 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_LEFT, ad->l_button);
913 evas_object_show(ad->l_button);
916 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_RIGHT, ad->r_button);
917 ad->has_form_changed = TRUE;//intialize
918 setting_network_connection_check_entry_empty(ad);
919 ad->has_form_changed = FALSE;//restore
922 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_MORE, ad->m_button);
923 evas_object_show(ad->r_button);
927 ad->back_btn = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_PREV);
928 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_PREV, NULL);
929 evas_object_hide(ad->back_btn);
931 //remove other buttons on controlbar
932 ad->controlbar = elm_object_item_part_content_unset(ad->navi_it, NAVI_CONTROLBAR_PART);
933 elm_object_item_part_content_set(ad->navi_it, NAVI_CONTROLBAR_PART, NULL);
934 evas_object_hide(ad->controlbar);
937 setting_network_edit_connection_click_softkey_reset_cb(void *data,
943 retm_if(data == NULL, "Data parameter is NULL");
945 SettingNetworkUG *ad = (SettingNetworkUG *) data;
946 net_profile_info_t *con_info = NULL;
948 if (ad->prof_sel_idx != SETTING_ADD_PROFILE_INDEX) {
949 con_info = &(ad->prof_list[ad->prof_sel_idx]);
951 con_info = (net_profile_info_t *)calloc(1, sizeof(net_profile_info_t));
952 setting_retm_if(!con_info, "Failed to alloc for net_profile_info_t");
955 const char *access_name = _("Connection");
956 int auth_type = NET_PDP_AUTH_NONE;
957 safeCopyStr(con_info->ProfileInfo.Pdp.Apn, access_name, NET_PDP_APN_LEN_MAX);
958 con_info->ProfileInfo.Pdp.AuthInfo.AuthType = auth_type;
960 safeCopyStr(con_info->ProfileInfo.Pdp.net_info.ProxyAddr, "0.0.0.0:80",
962 safeCopyStr(con_info->ProfileInfo.Pdp.HomeURL,
963 URL_HEAD, NET_HOME_URL_LEN_MAX);
965 SETTING_TRACE("ad->con_type:%d", ad->con_type);
966 /* save connection */
967 if (ad->prof_sel_idx == SETTING_ADD_PROFILE_INDEX)
970 if (ad->con_type == NET_SERVICE_INTERNET)
971 { /* Internet Connection */
972 safeCopyStr(con_info->ProfileName,
973 "IDS_ST_BODY_INTERNET_CONNECTION",
974 strlen("IDS_ST_BODY_INTERNET_CONNECTION"));
975 //con_info->ProfileInfo.Pdp.ServiceCategoryId = 1;
979 safeCopyStr(con_info->ProfileName, STR_SETTING_MMS_CONNECTIONS,
980 strlen(STR_SETTING_MMS_CONNECTIONS));
981 //con_info->ProfileInfo.Pdp.ServiceCategoryId = 2;
983 /** Specifies a protocol type */
985 /** network information */
986 con_info->ProfileInfo.Pdp.ServiceType = ad->con_type;
988 con_info->profile_type = NET_DEVICE_CELLULAR;
989 con_info->ProfileState = NET_STATE_TYPE_UNKNOWN;
990 con_info->ProfileInfo.Pdp.ProtocolType = NET_PDP_TYPE_GPRS;
992 err = net_add_profile(ad->con_type, con_info);
993 if (err != NET_ERR_NONE)
996 ("%s*** [ERR] net_add_profile. err=%d ***%s",
997 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
998 setting_create_simple_popup(ad, ad->win_get,
999 NULL, _(Invok_API_Failed_Desc));
1005 err = net_modify_profile(con_info->ProfileName, con_info);
1006 if (err != NET_ERR_NONE)
1009 ("%s*** [ERR] net_modify_profile. err=%d ***%s",
1010 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
1014 if (err == NET_ERR_NONE) //update genlist when it operaters sucessfully
1016 if (!ad->prof_list) __get_connection_info(ad);//maybe new added
1017 ad->ed_acs_name_desc = access_name;
1018 ad->ed_user_name_desc = NULL;
1019 ad->ed_pwd_desc = NULL;
1020 ad->ed_pxy_addr_desc = g_strdup("0.0.0.0");
1021 ad->ed_pxy_port_desc = g_strdup("80");
1022 ad->ed_hm_url_desc = URL_HEAD;
1023 ad->chkType = NET_PDP_AUTH_NONE;
1024 ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
1025 __update_genlist_info(ad);
1029 elm_genlist_realized_items_update(ad->scl_edit);//refresh genlist
1031 ecore_idler_add(__connection_idler, ad);
1035 setting_network_edit_connection_click_softkey_save_cb(void *data,
1039 SETTING_TRACE_BEGIN;
1041 retm_if(data == NULL, "Data parameter is NULL");
1043 SettingNetworkUG *ad = (SettingNetworkUG *) data;
1044 /* elm_box_unpack_all(ad->bx_blk); */
1045 /* elm_dialoguegroup_remove_all(ad->dg_blk); */
1047 int ret = setting_network_edit_connection_save_connection(ad);
1048 /* need special handle */
1049 if (SETTING_DNET_RETURN_NULL_ACCESS_NAME == ret
1050 || SETTING_DNET_RETURN_NULL_USER_NAME == ret
1051 || SETTING_DNET_RETURN_NULL_PASSWORD == ret
1052 || SETTING_DNET_RETURN_INVALID_PROXY_ADDR == ret
1053 || SETTING_DNET_RETURN_ERR == ret) {
1056 if (ret != SETTING_RETURN_SUCCESS) {
1058 ("%s*** [ERR] setting_network_edit_connection_save_connection ***%s",
1059 SETTING_FONT_RED, SETTING_FONT_BLACK);
1062 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(KeyStr_Saved), NULL, POPUP_INTERVAL, FALSE, FALSE);
1063 //re-fetch connection info..
1064 FREE(ad->prof_list);
1065 __get_connection_info(ad);
1067 setting_network_edit_connection_click_softkey_cancel_cb(ad, ad->r_button, NULL);
1071 setting_network_edit_connection_click_softkey_back_cb(void *data,
1075 SETTING_TRACE_BEGIN;
1077 retm_if(data == NULL, "Data parameter is NULL");
1079 SettingNetworkUG *ad = (SettingNetworkUG *) data;
1080 /* elm_box_unpack_all(ad->bx_blk); */
1081 /* elm_dialoguegroup_remove_all(ad->dg_blk); */
1082 setting_view_change(&setting_view_network_connection_create,
1083 &setting_view_network_main, ad);
1086 setting_network_edit_connection_click_softkey_cancel_cb(void *data,
1090 SETTING_TRACE_BEGIN;
1092 retm_if(data == NULL, "Data parameter is NULL");
1094 SettingNetworkUG *ad = (SettingNetworkUG *) data;
1095 ad->l_button = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_LEFT);
1096 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_LEFT, NULL);
1097 evas_object_hide(ad->l_button);
1099 ad->m_button = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_MORE);
1100 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_MORE, NULL);
1101 evas_object_hide(ad->m_button);
1103 ad->r_button = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_RIGHT);
1104 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_RIGHT, NULL);
1105 evas_object_hide(ad->r_button);
1106 //setting_disable_evas_object(ad->r_button);
1107 setting_undo_dim_evas_object(ad->r_button, TRUE);
1109 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_PREV, ad->back_btn);
1110 elm_object_item_part_content_set(ad->navi_it, NAVI_CONTROLBAR_PART, ad->controlbar);
1111 evas_object_show(ad->back_btn);
1112 evas_object_show(ad->controlbar);
1114 __get_connection_info(ad);
1115 __update_genlist_info(ad);
1116 if(ad->data_auth_type) elm_genlist_item_expanded_set(ad->data_auth_type->item, FALSE);
1117 ecore_idler_add(__connection_idler, ad);
1119 static void _gl_Gendial_sel(void *data, Evas_Object *obj, void *event_info)
1121 /* SETTING_TRACE_BEGIN; */
1122 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1123 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1124 elm_genlist_item_selected_set(item, 0);
1128 static void setting_network_connection_check_entry_empty(SettingNetworkUG *ad)
1130 SETTING_TRACE_BEGIN;
1131 if (!ad->has_form_changed)
1133 SETTING_TRACE_DEBUG("ad->has_form_changed == FALSE!");
1136 bool isFoundEmptyEntry = FALSE;
1139 if (ad->data_acs_name && isEmptyStr(ad->data_acs_name->sub_desc)) {
1140 SETTING_TRACE("entry_str:%s", ad->data_acs_name->sub_desc);
1141 isFoundEmptyEntry = TRUE;
1144 if (ad->data_user_name && isEmptyStr(ad->data_user_name->sub_desc)) {
1145 SETTING_TRACE("entry_str:%s", ad->data_user_name->sub_desc);
1146 isFoundEmptyEntry = TRUE;
1149 if (ad->data_pwd && isEmptyStr(ad->data_pwd->sub_desc)) {
1150 SETTING_TRACE("entry_str:%s", ad->data_pwd->sub_desc);
1151 isFoundEmptyEntry = TRUE;
1154 if (ad->data_hm_url && isEmptyStr(ad->data_hm_url->sub_desc)) {
1155 SETTING_TRACE("entry_str:%s", ad->data_hm_url->sub_desc);
1156 isFoundEmptyEntry = TRUE;
1160 Evas_Object *done_btn = elm_object_item_part_content_get(ad->navi_it, NAVI_BTN_STYLE_LEFT);
1161 if (isFoundEmptyEntry) {
1162 if (!evas_object_pass_events_get(done_btn)) {//it had not yet been disabled
1163 setting_disable_evas_object(done_btn);
1164 setting_dim_evas_object(done_btn, TRUE);
1168 //do nothing..if invoke setting_dim_evas_object many times, the done button will be dimer until it cannot be see.
1169 //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.
1172 setting_enable_evas_object(done_btn);
1173 setting_undo_dim_evas_object(done_btn, TRUE);
1178 setting_network_edit_connection_display_auth_type(SettingNetworkUG *ad,
1181 SETTING_TRACE_BEGIN;
1182 retm_if(ad == NULL, "Data parameter is NULL");
1183 if (ad->chkType == auth_type) return;
1185 ad->chkType = auth_type; /* for update genlist */
1186 if (NET_PDP_AUTH_NONE != auth_type) { /* to show */
1187 SETTING_TRACE("ad->is_show_user:%d", ad->is_show_user);
1188 if (ad->is_show_user == 0) { /* do only when hiden */
1189 SETTING_TRACE("to create");
1191 ad->data_user_name =
1192 (Setting_GenGroupItem_Data *) calloc(1,
1194 (Setting_GenGroupItem_Data));
1195 setting_retm_if(ad->data_user_name == NULL, "calloc failed");
1196 ad->data_user_name->keyStr =
1197 (char *)g_strdup("IDS_COM_BODY_USER_NAME");
1198 ad->data_user_name->sub_desc =
1199 (char *)g_strdup(ad->ed_user_name_desc);
1200 ad->data_user_name->swallow_type =
1201 SWALLOW_Type_LAYOUT_ENTRY;
1202 ad->data_user_name->userdata = ad;
1203 ad->data_user_name->chk_change_cb =
1204 setting_network_connection_entry_changed_cb;
1205 ad->data_user_name->item =
1206 elm_genlist_item_insert_after(ad->scl_edit,
1210 ad->item_above_user_name,
1211 ELM_GENLIST_ITEM_NONE,
1212 _gl_Gendial_sel, ad);
1215 (Setting_GenGroupItem_Data *) calloc(1,
1217 (Setting_GenGroupItem_Data));
1219 setting_retm_if(ad->data_pwd == NULL, "calloc failed");
1220 ad->data_pwd->keyStr =
1221 (char *)g_strdup("IDS_COM_BODY_PASSWORD");
1222 ad->data_pwd->sub_desc =
1223 (char *)g_strdup(ad->ed_pwd_desc);
1224 ad->data_pwd->swallow_type = SWALLOW_Type_LAYOUT_ENTRY;
1225 ad->data_pwd->userdata = ad;
1226 ad->data_pwd->chk_change_cb =
1227 setting_network_connection_entry_changed_cb;
1228 ad->data_pwd->isPasswordFlag = TRUE;
1229 /* ad->data_pwd->chk_change_cb = chk_change_cb; */
1230 ad->data_pwd->item =
1231 elm_genlist_item_insert_after(ad->scl_edit,
1235 data_user_name->item,
1236 ELM_GENLIST_ITEM_NONE,
1237 _gl_Gendial_sel, ad);
1239 ad->item_above_proxy_add =
1240 elm_genlist_item_insert_after(ad->scl_edit,
1244 ELM_GENLIST_ITEM_NONE,
1246 elm_genlist_item_select_mode_set
1247 (ad->item_above_proxy_add, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1249 ad->has_form_changed = TRUE;
1250 setting_network_connection_check_entry_empty(ad);
1251 /* ad->is_show_user = 1; */
1253 ad->is_show_user = 1;
1254 } else { /* to hide */
1256 SETTING_TRACE("ad->is_show_user:%d", ad->is_show_user);
1257 if (ad->is_show_user == 1) { /* do only when shown */
1258 SETTING_TRACE("to destroy");
1259 if (ad->data_user_name) {
1260 elm_object_item_del(ad->data_user_name->item);
1261 ad->data_user_name = NULL;
1264 elm_object_item_del(ad->data_pwd->item);
1265 ad->data_pwd = NULL;
1267 if (ad->item_above_proxy_add) {
1268 elm_object_item_del(ad->item_above_proxy_add);
1269 ad->item_above_proxy_add = NULL;
1273 ad->has_form_changed = TRUE;
1274 setting_network_connection_check_entry_empty(ad);
1275 ad->is_show_user = 0;
1281 setting_network_connection_entry_changed_cb(void *data, Evas_Object *obj,
1284 SETTING_TRACE_BEGIN;
1285 retm_if(data == NULL, "Data parameter is NULL");
1286 Setting_GenGroupItem_Data *list_item =
1287 (Setting_GenGroupItem_Data *) data;
1288 SettingNetworkUG *ad = list_item->userdata;
1289 const char *entry_str = elm_entry_entry_get(obj);
1290 list_item->sub_desc = (char *)g_strdup(entry_str);
1291 ad->has_form_changed = TRUE;
1292 setting_network_connection_check_entry_empty(ad);
1295 setting_network_connection_hide_input_pannel(void *data)
1297 SETTING_TRACE_BEGIN;
1298 retm_if(data == NULL, "Data parameter is NULL");
1299 SettingNetworkUG *ad = data;
1300 if (ad->data_acs_name) {
1301 setting_hide_input_pannel_cb(ad->data_acs_name->eo_check);
1303 if (ad->data_user_name) {
1304 setting_hide_input_pannel_cb(ad->data_user_name->eo_check);
1307 setting_hide_input_pannel_cb(ad->data_pwd->eo_check);
1309 if (ad->data_pxy_addr) {
1310 setting_hide_input_pannel_cb(ad->data_pxy_addr->eo_check);
1312 if (ad->data_pxy_port) {
1313 setting_hide_input_pannel_cb(ad->data_pxy_port->eo_check);
1315 if (ad->data_hm_url) {
1316 setting_hide_input_pannel_cb(ad->data_hm_url->eo_check);